我是Java的新手,在尝试正确的命令输入后,我一直在尝试使用java.util.timer来重置现有的计时器。
但是,我无法正确取消timertask,因此如果多次调用该方法,则计时器线程会运行timertask的多个实例。任何帮助将不胜感激。
编辑:我已经更改了新Timer()的位置,但它似乎没有修复它。
Timer timer = new Timer();
TimerTask ttimer = new TimerTask() {
public void run() {
System.out.println("ping");
}
};
public static void main (String[] args) {
Timer timer = new Timer();
while (true) {
//BufferedReader to read input
//Something
if (input[0].equals("r")) {
time t = new time();
time.RestartTimer();
}
}
}
public void RestartTimer() {
ttimer.cancel();
timer.cancel();
Timer timer = new Timer();
TimerTask ttimer = new TimerTask() {
public void run() {
System.out.println("ping");
}
};
timer.scheduleAtFixedRate(ttimer, 10000, 10000);
}
答案 0 :(得分:2)
这是因为您在while循环中创建了一个新的时间类实例(time t = new time();)。而是这样做:
public static void main (String[] args) {
time t = new time(); // create an instance of time class
while (true) {
//Something
if (input[0].equals("r")) {
// call RestartTimer on the same in
t.RestartTimer();
}
}
}
同样在RestartTimer()函数内部,您正在创建Timer的新实例。改变如下:
public void RestartTimer() {
ttimer.cancel();
timer.cancel();
timer = new Timer();
TimerTask ttimer = new TimerTask() {
public void run() {
System.out.println("ping");
}
};
timer.scheduleAtFixedRate(ttimer, 10000, 10000);
}
答案 1 :(得分:0)
time.RestartTimer();除非您更改方法的修饰符或通过在main方法中使用静态对象调用此方法,否则将不会调用语句。我认为这是你的计时器没有得到更新的唯一原因。