2011-10-03 175 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