欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-07 08:40:50
  模拟一个电子时钟,它可以在任何时候被启动或者停止,并可以独立的运行。 1.定义一个clock类。它继承label类,并实现runnable接口。这个类中有一...

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

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

class clock extends label implements runnable
{
  //定义thread类型的clocker域
  public thread clocker=null;
  public clock()
  {
    
    //初始化时,把label设置为当前系统时间
    //调用tostring方法转化为string类型
    settext(new date().tostring());
  }
  //控制线程的启动
  public void start()
  {
    if(clocker==null)
    {
      //clocker通过thread类构造方法得到的对象进行初始化,并将clock类的当前对象作为参数
      clocker=new thread(this);
      clocker.start();
    }

  }
  //控制线程的停止
  public void stop()
  {
    clocker=null;
  }
  //实现runnable接口中的run()方法
  public void run()
  {
    thread currentthread=thread.currentthread();
    //判断clocker是否是当前运行的线程
    while(clocker==currentthread)
    {
            settext(new date().tostring());
            try
           {   //休眠1s钟
               clocker.sleep(1000);
      }
      catch (interruptedexception ie)
      {
        system.out.println("thread error:"+ie);
      }
    }
  
  }

}

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

public class clockframe extends frame implements actionlistener
{
  private button start=new button("start");
  private button stop=new button("stop");
  private clock c=new clock();
  public clockframe()
  {
    super("电子时钟");
    //设置窗体使用流式布局
    setlayout(new flowlayout());
    //添加按钮并且为其注册监听器
    add(start);
    start.addactionlistener(this);
    add(stop);
    stop.addactionlistener(this);
    //使用继承windowadapter的匿名内部类来实现窗口的关闭
    addwindowlistener(new windowadapter()
    {
      public void windowclosing(windowevent we)
      {system.exit(0);}
    });
    add(c);
    //使构件在窗口中得到合理的安排。
    pack();
    setvisible(true);


  }
  //通过调用clock对象中的方法,实现对事件的响应。
  public void actionperformed(actionevent ae)
  {
    if(ae.getsource()==start)
    {
      c.start();
    }
    else
      if(ae.getsource()==stop)
      c.stop();

  }
  public static void main(string[] args)
  {
    new clockframe();
  }
}

3、运行:

注:

需要导入的类:

import java.awt.*;
import java.awt.event.*;
import java.util.date;

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

import java.awt.*;  
import javax.swing.*;  
import java.util.date;  
 
/*timedemo.java 
 * @src 
public class timedemo extends jframe implements runnable {  
 
  thread clock;  
    
  public static void main(string[] args) {  
  timedemo td =new timedemo();  
  td.setdefaultcloseoperation(jframe.exit_on_close); //点击可见窗口右上角的红叉关闭  
   }  
    
  public timedemo(){  
   super("雪地漫步---java多线程数字时钟"); //继承父类构造方法,这里相当于font("雪地漫步---java多线程数字时钟");  
settitle("kk");  //这个则是子类的  
   this.setfont(new font("times new roman",font.bold,60));  //设置字体大小  
   this.go();    //自定义go方法,用于以后开启线程  
   setbounds(400,300,300,100);  
   this.setvisible(true);  
  }  
 
   public void go(){  
  stop();  
   if(clock==null){  
  //线程执行的主题作为thread类构造方法的参数。  
   clock=new thread(this);  
   clock.start();     //开启线程,实现run方法  
  }  
}  
 
  public void run() {  
    while(true)   //让线程一直进行  
  {  
//repain()方法是来控制graphics类的paint()方法的,repain()方法执行一次,即让paint()方法执行一次  
      repaint();   
     try{  
      thread.sleep(1000);   //参数是毫秒,1秒即1000毫秒  
     }catch(interruptedexception e){}  
    }  
   }  
 
  public void stop(){  
   clock=null;  
  }  
 
  public void paint(graphics g){  
   string s="";  
   date now=new date();  
   int hour=now.gethours();                       
   int minute=now.getminutes();  
   int second=now.getseconds();  
   s=hour+":"+minute+":"+second;  
   g.setcolor(color.green);  
   dimension dim=getsize();  
   g.fillrect(0, 0, dim.width, dim.height);  
   g.setcolor(color.red);  
   g.drawstring(s, 20, 80);  
  }  
} 

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

import java.awt.borderlayout;
 import java.awt.canvas;
 import java.awt.color;
 import java.awt.font;
 import java.awt.graphics;
 import java.sql.date;
 import java.text.simpledateformat;
 import java.util.calendar;
 import javax.swing.jframe;
 import javax.swing.jpanel;
 class clock extends canvas implements runnable{

   /*
   http://ohgrateboy.blog.163.com我的博客
   */

   private static final long serialversionuid = 3660124045489727166l;
   thread t;
   jframe frame=new jframe();
   jpanel conpane;
   string time;
   int i=0;
   date timer;
   public clock(){
     conpane=(jpanel)frame.getcontentpane();
     conpane.setlayout(new borderlayout());
     conpane.setsize(280,40);
     conpane.setbackground(color.white);
     conpane.add(this,borderlayout.center);
     t=new thread(this);        //实例化线
    t.start();    //调用线程
    
     frame.setvisible(true);
     frame.setsize(300, 150);
     frame.setdefaultcloseoperation(jframe.exit_on_close);
   }

   public void run(){

     while(true){

     try{

       thread.sleep(1000);          //休眠1秒钟

    }catch(interruptedexception e){

       system.out.println("异常");
     }
     this.repaint(100);

   }

   }

   public void paint(graphics g){

     font f=new font("宋体",font.bold,16);

     simpledateformat sdf=new simpledateformat("yyyy'年'mm'月'dd'日'hh:mm:ss");//格式化时间显示类型
    calendar now=calendar.getinstance();

     time=sdf.format(now.gettime());    //得到当前日期和时间
    g.setfont(f);

     g.setcolor(color.orange);

     g.drawstring(time,45,25);

   }
   public static void main(string args[]){
     new clock();
   }

 }