首页 > 开发 > Java > 正文

java多线程编程制作电子时钟

2024-07-13 09:56:08
字体:
来源:转载
供稿:网友

本文给大家汇总了几个使用java多线程编程实现的电子时钟的代码,思路非常的巧妙,也都很实用,有需要的小伙伴可以参考下。

模拟一个电子时钟,它可以在任何时候被启动或者停止,并可以独立的运行。

1.定义一个Clock类。它继承Label类,并实现Runnable接口。这个类中有一个Thread类型的clocker域,以及start()和run()方法。在run()方法中,每隔一秒就把系统时间显示为label的文本。

 

 
  1. class Clock extends Label implements Runnable 
  2. //定义Thread类型的clocker域 
  3. public Thread clocker=null
  4. public Clock() 
  5.  
  6. //初始化时,把label设置为当前系统时间 
  7. //调用toString方法转化为String类型 
  8. setText(new Date().toString()); 
  9. //控制线程的启动 
  10. public void start() 
  11. if(clocker==null
  12. //clocker通过Thread类构造方法得到的对象进行初始化,并将Clock类的当前对象作为参数 
  13. clocker=new Thread(this); 
  14. clocker.start(); 
  15.  
  16. //控制线程的停止 
  17. public void stop() 
  18. clocker=null
  19. //实现Runnable接口中的run()方法 
  20. public void run() 
  21. Thread currentThread=Thread.currentThread(); 
  22. //判断clocker是否是当前运行的线程 
  23. while(clocker==currentThread) 
  24. setText(new Date().toString()); 
  25. try 
  26. //休眠1s钟 
  27. clocker.sleep(1000); 
  28. catch (InterruptedException ie) 
  29. System.out.println("Thread error:"+ie); 
  30.  
  31.  

2.定义一个ClockFrame类。它继承Frame类,并实现ActionListener接口。在这个类中定义start和stop按钮来控制电子时钟的运行。并且这个类有一个Clock类的域,把这个Clock类对象添加到ClockFrame类中显示。

 

 
  1. public class ClockFrame extends Frame implements ActionListener 
  2. private Button start=new Button("Start"); 
  3. private Button stop=new Button("Stop"); 
  4. private Clock c=new Clock(); 
  5. public ClockFrame() 
  6. super("电子时钟"); 
  7. //设置窗体使用流式布局 
  8. setLayout(new FlowLayout()); 
  9. //添加按钮并且为其注册监听器 
  10. add(start); 
  11. start.addActionListener(this); 
  12. add(stop); 
  13. stop.addActionListener(this); 
  14. //使用继承WindowAdapter的匿名内部类来实现窗口的关闭 
  15. addWindowListener(new WindowAdapter() 
  16. public void windowClosing(WindowEvent we) 
  17. {System.exit(0);} 
  18. }); 
  19. add(c); 
  20. //使构件在窗口中得到合理的安排。 
  21. pack(); 
  22. setVisible(true); 
  23.  
  24.  
  25. //通过调用Clock对象中的方法,实现对事件的响应。 
  26. public void actionPerformed(ActionEvent ae) 
  27. if(ae.getSource()==start) 
  28. c.start(); 
  29. else 
  30. if(ae.getSource()==stop) 
  31. c.stop(); 
  32.  
  33. public static void main(String[] args) 
  34. new ClockFrame(); 

3、运行:

注:

需要导入的类:

 

 
  1. import java.awt.*; 
  2. import java.awt.event.*; 
  3. import java.util.Date; 

再给大家一个网友的做法,非常不错

 

 
  1. import java.awt.*;  
  2. import javax.swing.*;  
  3. import java.util.Date;  
  4.  
  5. /*TimeDemo.java  
  6. * @src 
  7. public class TimeDemo extends JFrame implements Runnable {  
  8.  
  9. Thread clock;  
  10.  
  11. public static void main(String[] args) {  
  12. TimeDemo td =new TimeDemo();  
  13. td.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //点击可见窗口右上角的红叉关闭  
  14. }  
  15.  
  16. public TimeDemo(){  
  17. super("雪地漫步---java多线程数字时钟"); //继承父类构造方法,这里相当于Font("雪地漫步---java多线程数字时钟");  
  18. setTitle("kk"); //这个则是子类的  
  19. this.setFont(new Font("Times New Roman",Font.BOLD,60)); //设置字体大小  
  20. this.go(); //自定义go方法,用于以后开启线程  
  21. setBounds(400,300,300,100);  
  22. this.setVisible(true);  
  23. }  
  24.  
  25. public void go(){  
  26. stop();  
  27. if(clock==null){  
  28. //线程执行的主题作为Thread类构造方法的参数。  
  29. clock=new Thread(this);  
  30. clock.start(); //开启线程,实现run方法  
  31. }  
  32. }  
  33.  
  34. public void run() {  
  35. while(true//让线程一直进行  
  36. {  
  37. //repain()方法是来控制Graphics类的paint()方法的,repain()方法执行一次,即让paint()方法执行一次  
  38. repaint();  
  39. try{  
  40. Thread.sleep(1000); //参数是毫秒,1秒即1000毫秒  
  41. }catch(InterruptedException e){}  
  42. }  
  43. }  
  44.  
  45. public void stop(){  
  46. clock=null;  
  47. }  
  48.  
  49. public void paint(Graphics g){  
  50. String s="";  
  51. Date now=new Date();  
  52. int hour=now.getHours();  
  53. int minute=now.getMinutes();  
  54. int second=now.getSeconds();  
  55. s=hour+":"+minute+":"+second;  
  56. g.setColor(Color.green);  
  57. Dimension dim=getSize();  
  58. g.fillRect(0, 0, dim.width, dim.height);  
  59. g.setColor(Color.red);  
  60. g.drawString(s, 20, 80);  
  61. }  

例子三:思路更加的巧妙,分享给大家

 

 
  1. import java.awt.BorderLayout; 
  2. import java.awt.Canvas; 
  3. import java.awt.Color; 
  4. import java.awt.Font; 
  5. import java.awt.Graphics; 
  6. import java.sql.Date; 
  7. import java.text.SimpleDateFormat; 
  8. import java.util.Calendar; 
  9. import javax.swing.JFrame; 
  10. import javax.swing.JPanel; 
  11. class Clock extends Canvas implements Runnable{ 
  12.  
  13. /* 
  14. http://ohgrateboy.blog.163.com我的博客 
  15. */ 
  16.  
  17. private static final long serialVersionUID = 3660124045489727166L; 
  18. Thread t; 
  19. JFrame frame=new JFrame(); 
  20. JPanel conPane; 
  21. String time; 
  22. int i=0; 
  23. Date timer; 
  24. public Clock(){ 
  25. conPane=(JPanel)frame.getContentPane(); 
  26. conPane.setLayout(new BorderLayout()); 
  27. conPane.setSize(280,40); 
  28. conPane.setBackground(Color.white); 
  29. conPane.add(this,BorderLayout.CENTER); 
  30. t=new Thread(this); //实例化线 
  31. t.start(); //调用线程 
  32.  
  33. frame.setVisible(true); 
  34. frame.setSize(300, 150); 
  35. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  36.  
  37. public void run(){ 
  38.  
  39. while(true){ 
  40.  
  41. try
  42.  
  43. Thread.sleep(1000); //休眠1秒钟 
  44.  
  45. }catch(InterruptedException e){ 
  46.  
  47. System.out.println("异常"); 
  48. this.repaint(100); 
  49.  
  50.  
  51.  
  52. public void paint(Graphics g){ 
  53.  
  54. Font f=new Font("宋体",Font.BOLD,16); 
  55.  
  56. SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss");//格式化时间显示类型 
  57. Calendar now=Calendar.getInstance(); 
  58.  
  59. time=SDF.format(now.getTime()); //得到当前日期和时间 
  60. g.setFont(f); 
  61.  
  62. g.setColor(Color.orange); 
  63.  
  64. g.drawString(time,45,25); 
  65.  
  66. public static void main(String args[]){ 
  67. new Clock(); 
  68.  


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表