1

我被鼓励使用 Java Swing 计时器而不是粗略的方法Thread.sleep(2000);- 但这给我带来了问题。

具体来说,我不确定如何调用将执行计时器的函数。假设我的计时器是 20 分钟,我希望能够这样说:

for(int i = 0; i<10; i++){
   call20MinuteTimer();
}

然后该计时器将运行 10 次(即循环 200 分钟)。使用 Thread.sleep() 上面的 wwa 非常简单。我只能说。

这是我的代码现在的样子:

    ActionListener a9 = new ActionListener(){
        public void actionPerformed(ActionEvent evt){

        DateFormat dateFormat = new SimpleDateFormat("HH:mm");
        String currentTime = (String) dateFormat.format(new Date());

        combo2.append("You completed " + i + ""
        +  " pomodoros! At " + currentTime + " \n");
         Toolkit.getDefaultToolkit().beep();
        }
      };



    Timer newTimer = new Timer(500, a9);
    newTimer.start();
    newTimer.setRepeats(false);

如果我将上述所有代码行放入一个函数中(在 main 之外),它只会调用一次。

也许我不清楚发生了什么?我只是迷路了。谢谢

4

1 回答 1

3

要让计时器循环“x”次,请给它一个计数字段:

ActionListener a9 = new ActionListener(){
  private int count = 0;

  public void actionPerformed(ActionEvent evt){
    if (count < MAX_COUNT) { // MAX_COUNT is an int constant, here, 10

      // ... do something

    } else {
      // we're done -- stop the Timer
      ((Timer)evt.getSource()).stop();
    }
    count++;
  }
};

关键是,虽然看起来您正在执行循环类型的操作,但要执行此操作,您不使用循环。相反,您必须让计时器重复调用此代码。

此外,这:Timer newTimer = new Timer(500, a9);使其每 500 毫秒重复一次。

这:newTimer.setRepeats(false);让它根本不重复!如果您希望计时器重复,您将希望摆脱这条线。

于 2013-11-09T20:39:57.057 回答