Java计时器,每秒更新一次

时间:2014-11-02 12:43:13

标签: java swing date time timer

我想从系统中获取当前日期和时间,我可以使用此代码:

    private void GetCurrentDateTimeActionPerformed(java.awt.event.ActionEvent evt) {                                                   
    DateFormat dateandtime = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    Date date = new Date();
    CurrentDateTime.setText(dateandtime.format(date));
}                                                  

这样做很好,因为它会抓住当前日期并且没有问题,但它不是动态的,因为除非再次按下按钮,否则时间不会更新。所以我想知道如何通过每秒更新一次功能来刷新时间来使这个按钮更加动态。

4 个答案:

答案 0 :(得分:3)

您可以使用executor定期更新。像这样:

ScheduledExecutorService e= Executors.newSingleThreadScheduledExecutor();
e.scheduleAtFixedRate(new Runnable() {
  @Override
  public void run() {
    // do stuff
    SwingUtilities.invokeLater(new Runnable() {
       // of course, you could improve this by moving dateformat variable elsewhere
       DateFormat dateandtime = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
       Date date = new Date();
       CurrentDateTime.setText(dateandtime.format(date));
    });
  }
}, 0, 1, TimeUnit.SECONDS);

答案 1 :(得分:1)

首先定义一个TimerTask

class MyTimerTask extends TimerTask  {
    JLabel currentDateTime;

     public MyTimerTask(JLabel aLabel) {
         this.currentDateTime = aLabel;
     }

     @Override
     public void run() {
         SwingUtilities.invokeLater(
                 new Runnable() {

                    public void run() {
                        // You can do anything you want with 'aLabel'
                         DateFormat dateandtime = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
                         Date date = new Date();
                         currentDateTime.setText(dateandtime.format(date));

                    }
                });
     }
}

然后,您需要在启动应用程序或UI时创建java.util.Timer。例如你的main()方法。

...

Timer timer = new Timer();
timer.schedule(new MyTimerTask(label), 0, 1000);

...

答案 2 :(得分:0)

Swing计时器(javax.swing.Timer的一个实例)在指定的延迟后触发一个或多个动作事件。 参考: http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html
This answer might be useful for you

答案 3 :(得分:0)

使用Swing Timer:

DateFormat dateandtime = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Timer t = new Timer(500, new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        Date date = new Date();
        CurrentDateTime.setText(dateandtime.format(date));
        repaint();
    }
});
t.start();