【发布时间】:2014-07-28 17:41:13
【问题描述】:
基本上我想做的是制作一个在 x 秒后运行特定 TimerTask 的 Timer,但是 TimerTask 可以重新安排 Timer 在 y 秒后执行任务。示例如下,它给了我一个错误“线程“Timer-0”java.lang.IllegalStateException:任务已经安排或取消”,我尝试在 TimerTask 运行中安排此任务。
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.");
}
}
【问题讨论】:
-
为什么你在run()方法中又写了同一行?计时器 = 新计时器(); timer.schedule(this, seconds*200);因为你已经在构造函数中安排了你的任务,所以你得到了 java.lang.IllegalStateException。删除这些行并再次运行。
标签: java multithreading timer timertask