用按钮停止计时器

时间:2016-07-08 03:54:08

标签: java loops timer

我有一个启动按钮,可以启动带循环的计时器。

public synchronized void startTourButtonActionPerformed(java.awt.event.ActionEvent evt) {
    new java.util.Timer().schedule(new java.util.TimerTask() {
        @Override
        public void run() {

            try {
                byte st = presetNo[count];
                System.out.println("Start Tour Button pressed, String:  " + st);

                // this part will run from 0 to max of presets every
                // counting.
                count++;
                if (count >= MaxCount)
                    count = 0;

                byte[] command = { (byte) startTx, address, byteOne, goPreset, 0x00, st, endTx, 0x0F };
                TwoWaySerialComm.SerialWriter sw = new TwoWaySerialComm.SerialWriter(
                        twoWaySerCom.serialPort.getOutputStream());

                sw.out.write(command);

            }

            catch (IOException e) {
                e.printStackTrace();
            }

        }
    }, 100, 5000);
}

我还有另一个'停止'按钮。目前我通过打破它并获得异常来停止循环。显然不是正确的程序,也停止了启动按钮的工作。

public synchronized void stopTourButtonActionPerformed(java.awt.event.ActionEvent evt){
    count = -1;
}

我的问题是如何正确阻止它以便我可以在之后重启?

1 个答案:

答案 0 :(得分:2)

只需保留计时器(变量)的引用并调用cancel()方法。

startTourButtonActionPerformed

//...
timer = new java.util.Timer();
timer.schedule(new java.util.TimerTask() {
//...

stopTourButtonActionPerformed

timer.cancel();

请注意,它会取消您timer的所有任务。如果你想要只精确地停止一个单一任务,那么TimerTask上还有一个cancel()方法。