Java Swing Timer启动问题

时间:2014-10-31 12:11:40

标签: java swing netbeans timer

使用有用的用户提供的代码 Stefan 我已经编辑了自己的代码来模仿他,但是我无法启动计时器。我已经尝试将实例移出私有void,这会导致其他错误,例如尝试重新定义timer变量。

private Timer timer;        

private void StartStopTimerActionPerformed(java.awt.event.ActionEvent evt) {                                               

    timer = new Timer(5000,new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent evt) {

        }
    });

    StartStopTimer.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (!timer.isRunning()) {
                timer.start(); AddOneActionPerformed(evt);
            } else {
                timer.stop();
            }
        }
    });
}                 

此代码对计时器没有影响。它没有开始计算

1 个答案:

答案 0 :(得分:5)

您在每次点击按钮时都会创建新的计时器(第3行)。在您的班级中将计时器设为字段,初始化一次,只在ActionListeners中调用start和stop。

要暂停定时器调用“stop()”,要重置它,请调用“restart()”。

<强>更新

import javax.swing.Timer;

class TimerExample {

   // only one timer per class (field)
   private Timer timer;

   TimerExample() {

    // initialize: counts 5 seconds, calls actionPerformed() and stops
    timer = new Timer(1000, new ActionListener(){

      @Override
      public void actionPerformed(ActionEvent evt) {
        // handle timer invoked ...
        System.out.println("Now!");
      }      
    });
    timer.setRepeats(true);

    JButton startStopBtn = new JButton("Start / Stop");
    startStopBtn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (!timer.isRunning()) {
                timer.start();
            } else {
                timer.stop();
            }
        }
    });
  }
 ...
}