У меня есть JButton, который запускает таймер обратного отсчета при нажатии.Когда я нажимаю кнопку, она начинается, а когда я нажимаю ее снова (кнопка скажет «Стоп»), она останавливается.Однако, когда я нажимаю его снова, чтобы начать время снова, я получаю сообщение об ошибке:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Timer already cancelled.
Вот мой код:
final static Timer t = new Timer();
static void startTimer(JButton b) {
t = new Timer(); // Solved: I needed to create a new Timer object.
t.scheduleAtFixedRate(new TimerTask() {
double timeleft = calcShutterSpeed;
@Override
public void run() {
String s = secondsToMinutes(timeleft);
time.setText(s);
timeleft--;
if (timeleft < 0) {
t.cancel();
b.setText("START TIMER");
b.setForeground(Color.BLACK);
}
}
}, 0, 1000);
}
static void stopTimer() {
t.cancel();
}
/**
* Creates the timer if "Start" is pressed.
*
* @param b
*/
static void timer(JButton b) {
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// If start button is pressed, change text to display stop
if (b.getText() == "START TIMER") {
startTimer(b);
b.setText("STOP TIMER");
b.setForeground(Color.RED);
}
// If stop button is pressed, cancel timer and change text to start
else if (b.getText() == "STOP TIMER") {
stopTimer();
b.setText("START TIMER");
b.setForeground(Color.BLACK);
}
}
});
}
Любые советы или предложения, которые могут решить эту проблему, могутбыть высоко ценится.Заранее спасибо!
РЕДАКТИРОВАТЬ: действительно очень простое исправление для любопытных.Исправление в коде.