タイマーのスケジュールを変更するにはどうすればよいですか。タイマー/タイマータスクをキャンセルし、メソッドを使用して再度スケジュールしようとしました。しかし、それは例外エラーを示しています:
例外エラーjava.lang.IllegalStateException:TimerTaskはすでにスケジュールされています
私が使用したコード:
プライベートタイマータイマー= new Timer( "alertTimer"、true); public void reScheduleTimer(int duration){ timer.cancel(); タイマー。 schedule(timerTask、1000L、duration * 1000L); }
Timer.cancel()のドキュメントを参照すると、次のように表示されます。
「タイマーとスケジュールされたすべてのタスクをキャンセルします。現在実行中のタスクがある場合、影響はありません。このタイマーでこれ以上タスクをスケジュールすることはできません。その後の呼び出しは何もしません。」
スケジュールを変更する場合は、新しいタイマーを初期化する必要があります。
編集:
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
}
}
実際、 cancel method javadoc を見ると、次のことがわかります。
現在実行中のタスクを妨害しません(存在する場合)。
これは、タイマーに「これ以上タスクはありませんが、実行中のタスクを完了することができます」と伝えます。 TimerTaskをキャンセルする も必要になると思います。
@Eric Nordvikの回答は順調です。
私たちにできることの1つは、以前のタイマーイベントの実行をキャンセルすることです
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);
}