繁体   English   中英

TimerTask启动停止仅执行一次

[英]TimerTask start stop only executing once

问题,我只能执行一次计时器。 我知道它是因为我调用了timer2.cancel();函数。 和timer1.cancel(); ::取消成为“永不再运行”。 我需要一个替换功能,该功能实际上会停止一个计时器,但是当我重新安排它时可以重新启动它。 我该怎么做呢?

      public void actionPerformed (ActionEvent e){

      if (e.getSource()==jbtStart)
      {

          System.out.println("Start is pressed");
          timer2.cancel();        
          timer1.schedule(new Task(), 0, delay);
      }

      else if (e.getSource()==jbtStop)
      {   
            System.out.println("Stop is pressed");
            timer1.cancel();        
            timer2.schedule(new Task2(), 0, delay);

      }

为什么不在那时创建一个新的Timer 如果不是这样,或者保持的保持TimerTask以及定时器,以及取消 ,而不是计时器本身。

作为第三个可能的选择,有一个计时器任务和一个计时器,但是让计时器任务知道它在任何时候都要做的事情-看起来您每次在计时器滴答时都有效地切换了要执行的操作。 您始终可以保留两个单独的类来分离逻辑功能,然后拥有一个“包装器”任务,该任务使您可以替换每次运行时执行的行为。

我将取消TimerTasks而不是计时器(并且我将仅使用一个计时器)。

更新:

   private Task task1;
   private Task2 task2;

 public void actionPerformed (ActionEvent e){

      if (e.getSource()==jbtStart)
      {

          System.out.println("Start is pressed");
          if (task2 != null) {
              task2.cancel();
          }
          task1 = new Task();
          timer.schedule(task1, 0, delay);
      }

      else if (e.getSource()==jbtStop)
      {   
            System.out.println("Stop is pressed");
            if (task1 != null) {
                task1.cancel();
            }
            task2 = new Task2();
            timer.schedule(task2, 0, delay);
      }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM