2011-10-03 176 views
1

问题,我只能执行一次我的计时器。我知道它是因为我调用了函数timer2.cancel();和timer1.cancel(); ::取消为“永不再运行”。我需要一个替换函数,一个实际上停止计时器的函数,但是当我重新调度它时可以重新开始备份。我该如何去做呢?TimerTask启动停止只执行一次

 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); 

     } 
+0

不知道,从ActionListener只有codenipped,没有明确什么是你的定义(s)java.util.Timer – mKorbel

回答

1

我会取消TimerTasks而不是定时器(我只使用一个Timer)。

UPDATE:

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); 
     } 
+0

和我将如何去做呢? – user976123

+0

看到我的更新 –

2

为什么不只是建立在这一点上一个新Timer?要么是这样,要么保持TimerTask以及定时器,取消而不是定时器本身。

作为第三可能替代,有一个计时器任务和一个计时器,但要定时任务意识到什么它意味着在任何时候做的事情 - 它看起来像你有效地切换你要什么每次计时器滴答。您可以始终保留两个单独的类来分隔逻辑功能,然后有一个“包装器”任务,它允许您替换每次运行时执行的行为。

+1

如果我假装说我会说,那会让我变得聪明吗? – cwallenpoole