【问题标题】:Timer Delay Not Working?定时器延迟不起作用?
【发布时间】:2017-12-28 16:51:52
【问题描述】:

我试图让这个程序每秒在控制台中打印当前时间。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;
import java.util.Date;

public class E10U27 extends JFrame {
    public static void main(String[] args){

   // Prep the listener to respond
   class TimerListener implements ActionListener {
      public void actionPerformed(ActionEvent event) {

         Date now = new Date();
         System.out.println(now);
      }
   }

   ActionListener listener = new TimerListener();
   final int DELAY = 1000; 
   Timer t = new Timer(DELAY, listener);
   t.start();    
}
}

但是,它一次打印 50 次(例如 2:52 50 次),依此类推。它确实正确地打勾。如何让它正确运行?我的代码有错误吗?

【问题讨论】:

  • 如果没有错误,可能是bluej有问题:/
  • 您等了多长时间? 1000 秒几乎是 17 分钟。
  • @FredK OP 抱怨它根本不等待
  • 我将延迟更改为 1,它的滴答声正确,但打印出来的每个延迟都像 50 个。
  • 您的程序似乎运行良好(至少对于足够短的延迟可以在 Swing 捕捉到没有活动窗口的事实之前赶上)。所以我投票以“不能重新减少”为关闭。 1 的值是一毫秒,而不是秒。所以你一定会得到很多。

标签: java timer bluej


【解决方案1】:

我运行代码没有错误,但它完成后没有显示分配给 Timer 的时间间隔内的日期,所以我做了一些更改

  1. 将 DELAY 更改为 1000(1 秒)以每秒打印当前时间

final int DELAY = 1000;

  1. 创建框架让程序继续运行,否则main方法会结束(new E10U27()).setVisible(true);

这是修改后的程序,它每秒打印一次当前时间:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;
import java.util.Date;

public class E10U27 extends JFrame {
    public static void main(String[] args){

        // Prep the listener to respond
        class TimerListener implements ActionListener {
            public void actionPerformed(ActionEvent event) {

                Date now = new Date();
                System.out.println(now);
            }
        }

        ActionListener listener = new TimerListener();
        final int DELAY = 1000; // Milliseconds between timer ticks
        Timer t = new Timer(DELAY, listener);
        t.start();

        (new E10U27()).setVisible(true);
    }
}

【讨论】:

    【解决方案2】:
    final int DELAY = 999999;    
    Timer timer = new Timer(DELAY, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
        //Your Action    
        }
        });
        timer.start();
    

    参考这里的文档Java Docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      相关资源
      最近更新 更多