Sto provando a utilizzare un timer per pianificare un evento ricorrente in un'applicazione. Tuttavia, voglio essere in grado di regolare il periodo in cui l'evento si attiva in tempo reale (in base all'input dell'utente).Java Timer
Ad esempio:
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;
}
}
ho quindi avviare una nuova istanza di questa classe e chiamare la sua funzione determinato periodo. Tuttavia, quando lo faccio, ottengo un'eccezione di stato illegale. Puoi vedere System.out.println (timer); lì perché sto controllando, e abbastanza sicuro, sono due timer diversi ... quindi perché sto ricevendo un IllegalStateException quando provo a eseguire una chiamata programmata su un'istanza Timer nuova di zecca!?!?!?!
[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)
Come ha detto Kevin, si chiama "timer.schedule (questo, ritardo, punto)" con lo stesso "questo" ogni volta. Il TimerTask non è pensato per essere assegnato a più timer diversi. Ogni istanza TimerTask deve essere pianificata esattamente una volta. – Eddie
Grazie, non è uscito completamente dalla documentazione e non appena sono passato alla creazione di nuovi TimerTasks, tutto è andato secondo i piani .. – Zak
La specifica degli stati di pianificazione: @throws IllegalStateException se l'attività era già programmata o annullata, timer è stato annullato o il thread del timer è stato interrotto. L'attività era già pianificata in un timer precedente, quindi è stata generata l'eccezione. – notnoop