Java 使用线程创建数字时钟
我试图创建一个数字时钟使用线程,因为在我看来,这似乎是一个合乎逻辑的方式会这样做。 我不确定我的方法是否正确,但我想到的是使用JFrame构造函数创建初始当前系统时间,并使用标签将其显示为文本。在构造器中,我然后创建线程对象来更新时间 有点挣扎,希望得到一些关于如何正确操作的建议Java 使用线程创建数字时钟,java,Java,我试图创建一个数字时钟使用线程,因为在我看来,这似乎是一个合乎逻辑的方式会这样做。 我不确定我的方法是否正确,但我想到的是使用JFrame构造函数创建初始当前系统时间,并使用标签将其显示为文本。在构造器中,我然后创建线程对象来更新时间 有点挣扎,希望得到一些关于如何正确操作的建议 setDefaultCloseOperation((JFrame.EXIT_ON_CLOSE)); setBounds(50, 50, 200, 200); JPanel pane =
setDefaultCloseOperation((JFrame.EXIT_ON_CLOSE));
setBounds(50, 50, 200, 200);
JPanel pane = new JPanel();
label = new JLabel();
//Font localTime = new Font("Lumina", Font.BOLD , 24);
pane.add(label);
add(pane);
sdf = new SimpleDateFormat("HH:mm:ss");
date = new Date();
s = sdf.format(date);
label.setText(s);
setVisible(true);
runner = new Thread(this);
while(runner == null)
{
runner = new Thread(this);
runner.start();
}
这是我的run()方法,用于每秒更新时钟
public void run()
{
while(true)
{
try
{
Thread.sleep(1000);
sdf = new SimpleDateFormat("HH:mm:ss");
date = new Date();
s = sdf.format(date);
label.setText(s);
}
catch(Exception e){}
}
主要方法
public static void main(String[] args)
{
new DigitalClock().setVisible(true);
}
你想改进什么?它看起来还可以,
而(runner==null)
不是必需的,您正在初始化上面的runner。检查这个类
scheduleAtFixedRate(TimerTask任务、长延迟、长周期)可能是您需要的。标签状态应该在事件调度线程中更新 您需要添加以下修改:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
label.setText(s);
}
});
而不是简单地从单独的线程更新标签
值得一看的是对的简单描述,这是一个简单的解决方案。您具体在努力解决什么问题?看起来运行程序永远不会为null,因为您在while(runner==null)检查之前实例化并为其分配了一个线程对象。哦和+1纯粹是因为很少看到在这里提问之前已经尝试过的家庭作业问题:)