Остановить таймер кнопкой
У меня есть кнопка запуска, которая запускает таймер с циклом.
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, если вы хотите точно остановить только одну задачу.