Остановить таймер кнопкой

У меня есть кнопка запуска, которая запускает таймер с циклом.

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 ответ

Решение

Просто сохраните ссылку на таймер (переменную) и вызовите cancel() метод.

В startTourButtonActionPerformed

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

В stopTourButtonActionPerformed

timer.cancel();

Обратите внимание, это отменит все ваши timer задачи. Также есть cancel() метод TimerTask, если вы хотите точно остановить только одну задачу.

Другие вопросы по тегам