用线程实现时钟的问题

Darling_sheep 2010-10-31 05:20:21
大家好,我想做一个时钟,想让它能显示当前的时间,并随着时间而走动,但我做出来以后发现它只会显示运行那一刻的时间,不会走,调试了很长时间都不行,恳请各路大侠支招,不胜感激。期待各位的回复...
以下是我的代码:(文件名: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();
}
}
...全文
323 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
别人家的老公 2010-11-01
  • 打赏
  • 举报
回复
那你要结贴啊 你看你0%的结贴率

什么素质啊
Darling_sheep 2010-10-31
  • 打赏
  • 举报
回复
太感谢大家了,我两个多小时没有搞明白的问题到了大家面前一下就解决了,很对不起大家的是我没有足够的积分,是个新人,所以希望各位大侠能够谅解。我也会多顶贴或者回帖的,这里面的牛人太多了,希望能从众多高手那里学到很多东西。
24K純帥 2010-10-31
  • 打赏
  • 举报
回复
顶LS。。
huntor 2010-10-31
  • 打赏
  • 举报
回复
使用 javax.swing.Timer 定时器
茫茫大海 2010-10-31
  • 打赏
  • 举报
回复
看错了,应该是每一毫秒,取一次系统的时间!
茫茫大海 2010-10-31
  • 打赏
  • 举报
回复

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();
}
houjin_cn 2010-10-31
  • 打赏
  • 举报
回复
Calendar d=Calendar.getInstance(); 是取得当前时间, 不会变了, 只能每次用的时候重新调用取得新的时间
houjin_cn 2010-10-31
  • 打赏
  • 举报
回复
protected Calendar d=Calendar.getInstance(); 这个放到 while 循环中去

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧