Comment puis-je reporter une minuterie. J'ai essayé d'annuler le minuteur/la tâche de temps et de le programmer à nouveau en utilisant une méthode. Mais cela montre une erreur d'exception:
Exception errorjava.lang.IllegalStateException: TimerTask est déjà planifié
Code je l'ai utilisé:
minuteur privé = nouveau minuteur ("alertTimer", true); public void reScheduleTimer (int duration) { timer.cancel (); timer. planning (timerTask, 1000L, durée * 1000L); }
Si vous voyez la documentation sur Timer.cancel (), vous verrez ceci:
"Annule le minuteur et toutes les tâches planifiées. Si une tâche est en cours d'exécution, elle n'est pas affectée. Aucune autre tâche ne peut être planifiée sur ce minuteur. Les appels suivants ne font rien."
Vous devrez initialiser un nouveau minuteur lors de la replanification:
ÉDITER:
public void reScheduleTimer(int duration) {
timer = new Timer("alertTimer",true);
timerTask = new MyTimerTask();
timer.schedule(timerTask, 1000L, duration * 1000L);
}
private class MyTimerTask extends TimerTask {
@Override
public void run() {
// Do stuff
}
}
En fait, si vous regardez dans la méthode d'annulation javadoc , vous pouvez voir la chose suivante:
N'interfère pas avec une tâche en cours d'exécution (si elle existe).
Cela indique à la minuterie "ok, plus de tâches maintenant, mais vous pouvez terminer celle que vous faites". Je pense que vous devrez également annuler la TimerTask .
La réponse @Eric Nordvik fonctionne bien.
Une chose que nous pouvons faire est de annuler l'exécution des événements de minuterie précédents
public void reScheduleTimer(int duration) {
// Cancel previous timer first
timer.cancel();
timer = new Timer("alertTimer",true);
timerTask = new MyTimerTask();
timer.schedule(timerTask, 1000L, duration * 1000L);
}