大家好,我想做一个时钟,想让它能显示当前的时间,并随着时间而走动,但我做出来以后发现它只会显示运行那一刻的时间,不会走,调试了很长时间都不行,恳请各路大侠支招,不胜感激。期待各位的回复...
以下是我的代码:(文件名:ShowTime.java)
import java.util.*;
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class ShowTime extends Frame implements Runnable,ActionListener{
protected Calendar d=Calendar.getInstance();
     Label l1,l2,l3,l4,l5,l6,l7;
     TextField t1,t2,t3,t4,t5,t6,t7;
     Thread trd;
     String year,mon,day,hour,min,sec,msec;
     ShowTime(){
      super("Super Clock");
      setVisible(true);
      setLayout(new GridLayout(7,2));
      setBackground(Color.green);
      l1=new Label("年");
      l2=new Label("月");
      l3=new Label("日");
      l4=new Label("时");
      l5=new Label("分");
      l6=new Label("秒");
      l7=new Label("毫秒");
      t1=new TextField("",4);
      t2=new TextField("",4);
      t3=new TextField("",4);
      t4=new TextField("",4);
      t5=new TextField("",4);
      t6=new TextField("",4);
      t7=new TextField("",4);
      add(l1);add(t1);add(l2);add(t2);add(l3);add(t3);add(l4);add(t4);
      add(l5);add(t5);add(l6);add(t6);add(l7);add(t7);
      pack();
      trd=new Thread(this);     
      trd.start();
      addWindowListener(new WindowAdapter(){
         public void windowClosing(WindowEvent e){System.exit(0);}});
     }
    //@SuppressWarnings("deprecation")
public synchronized void  run(){
      while(true){
      year=Integer.toString(d.get(Calendar.YEAR));
      mon=Integer.toString(d.get(Calendar.MONTH)+1);
      day=Integer.toString(d.get(Calendar.DAY_OF_MONTH));
      hour=Integer.toString(d.get(Calendar.HOUR_OF_DAY));
      min=Integer.toString(d.get(Calendar.MINUTE));
      sec=Integer.toString(d.get(Calendar.SECOND));
      msec=Long.toString(d.get(Calendar.MILLISECOND)%1000);
      t1.setText(year);
      t2.setText(mon);
      t3.setText(day);
      t4.setText(hour);
      t5.setText(min);
      t6.setText(sec);
      t7.setText(msec);
      try{Thread.sleep(1);}
      catch(InterruptedException e){}
      }
     }
     public void actionPerformed(ActionEvent e){
      
     }
     public static void main(String []args){
      ShowTime frm=new ShowTime();
     }
}

解决方案 »

  1.   

    protected Calendar d=Calendar.getInstance();  这个放到  while 循环中去
      

  2.   

    Calendar d=Calendar.getInstance();  是取得当前时间,  不会变了, 只能每次用的时候重新调用取得新的时间
      

  3.   


    while (true) {
    year = Integer.toString(d.get(Calendar.YEAR));
    mon = Integer.toString(d.get(Calendar.MONTH) + 1);
    day = Integer.toString(d.get(Calendar.DAY_OF_MONTH));
    hour = Integer.toString(d.get(Calendar.HOUR_OF_DAY));
    min = Integer.toString(d.get(Calendar.MINUTE));
    sec = Integer.toString(d.get(Calendar.SECOND));
    msec = Long.toString(d.get(Calendar.MILLISECOND) % 1000);
    t1.setText(year);
    t2.setText(mon);
    t3.setText(day);
    t4.setText(hour);
    t5.setText(min);
    t6.setText(sec);
    t7.setText(msec);
    try {
    Thread.sleep(1);
    } catch (InterruptedException e) {
    }
    //增加了这句,不然你只是取了一次系统的时间,所以你在怎么循环值都不会变的,加上这句后,每秒钟取
    //一次系统时间,所以就合适了
    d = Calendar.getInstance();
    }
      

  4.   

    使用 javax.swing.Timer 定时器