Я пытаюсь использовать таймер для планирования повторяющегося события в приложении. Тем не менее, я хочу иметь возможность настроить период, в котором событие срабатывает в режиме реального времени (согласно входу пользователя).
Например:
public class HelperTimer extends TimerTask
{
private Timer timer;
//Default of 15 second between updates
private int secondsToDelay = 15;
public void setPeriod(int seconds)
{
this.secondsToDelay = seconds;
long delay = 1000; // 1 second
long period = 1000*secondsToDelay; // seconds
if (timer != null)
{
timer.cancel();
}
System.out.println(timer);
timer = new Timer();
System.out.println(timer);
timer.schedule(this, delay, period);
}
public int getPeriod()
{
return this.secondsToDelay;
}
}
Затем я запускаю новый экземпляр этого класса и вызываю его функцию set period. Однако, когда я это делаю, я получаю исключение из нелегального штата. Вы можете увидеть System.out.println(таймер); там, потому что я проверяю, и, конечно же, у них два разных таймера... так почему я получаю исключение IllegalStateException, когда я пытаюсь запустить расписание для нового экземпляра Timer!?!?!?!
[email protected]
[email protected]
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Task already scheduled or cancelled
at java.util.Timer.sched(Unknown Source)
at java.util.Timer.schedule(Unknown Source)
at HelperTimer.setPeriod(HelperTimer.java:38)