Java timer.cancel()没有停止计时器

时间:2014-04-23 04:54:25

标签: java timer

我是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);
}    

2 个答案:

答案 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方法中使用静态对象调用此方法,否则将不会调用语句。我认为这是你的计时器没有得到更新的唯一原因。