Timer 和 TimerTask - 如何从 TimerTask 运行中重新安排 Timer [英] Timer and TimerTask - how to reschedule Timer from within TimerTask run
本文介绍了Timer 和 TimerTask - 如何从 TimerTask 运行中重新安排 Timer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
基本上我想做的是制作一个在 x 秒后运行特定 TimerTask 的 Timer,但是 TimerTask 可以重新安排 Timer 在 y 秒后执行任务.示例如下,它给我一个错误线程Timer-0"中的异常java.lang.IllegalStateException:任务已经安排或取消"在线我尝试在TimerTask运行中安排此任务.
basically what I want to do is to make a Timer that runs a specific TimerTask after x seconds, but then the TimerTask can reschedule the Timer to do the task after y seconds. Example is below, it gives me an error "Exception in thread "Timer-0" java.lang.IllegalStateException: Task already scheduled or cancelled" on line where I try to schedule this task in TimerTask run.
import java.util.Timer;
import java.util.TimerTask;
public class JavaReminder {
public JavaReminder(int seconds) {
Timer timer = new Timer();
timer.schedule(new RemindTask(timer, seconds), seconds*2000);
}
class RemindTask extends TimerTask {
Timer timer;
int seconds;
RemindTask(Timer currentTimer, int sec){
timer = currentTimer;
seconds = sec;
}
@Override
public void run() {
System.out.println("ReminderTask is completed by Java timer");
timer = new Timer();
timer.schedule(this, seconds*200);
System.out.println("scheduled");
}
}
public static void main(String args[]) {
System.out.println("Java timer is about to start");
JavaReminder reminderBeep = new JavaReminder(2);
System.out.println("Remindertask is scheduled with Java timer.");
}
}
推荐答案
使用新的 RemindTask
而不是现有的.
Use new RemindTask
instead of existing one.
应该是
timer.schedule(new RemindTask(timer, seconds), seconds*200);
代替
timer.schedule(this, seconds*200);
这篇关于Timer 和 TimerTask - 如何从 TimerTask 运行中重新安排 Timer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文