TimerTask vs Timer vs Thread?

时间:2015-03-12 18:07:03

标签: java swing

我正在尝试在JLabel上连续显示日期和时间。所以在我看过的最后一个教程中,发言人说“你必须在必要时使用这个线程,因为它会占用程序中的内存”。

所以我搜索其他替代方案,我发现Timer和TimerTask是从程序的长期使用中最有效的方法吗?

1 个答案:

答案 0 :(得分:1)

定时器用于在一个间隔,延迟之后或两者的组合上运行任务(即:TimerTask)。在您的情况下,您可以使用以下内容:

   java.util.Timer timer = new java.util.Timer();
    timer.schedule(new TimerTask() {
        public void run() {
//            do task
        }
    }, 0, 1000);  //updates every second

请注意,为了更新Swing线程以外的线程中的Swing组件,您需要使用SwingWorker(请参阅Swing Concurrency Tutorial),或者使用Swing Timer。下面的代码使用Swing计时器以每秒更新标签:

javax.swing.Timer timer1 = new javax.swing.Timer(0, new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            label.setText(new Date());
        }
    });

    timer1.setRepeats(true);
    timer1.setDelay(1000);

我还没有对此进行测试,因此您可能需要稍微调整一下才能为您效劳。