2014-05-20 39 views
0

我嘗試通過相同的Jbutton啓動 - 停止定時器。讓我分享我的代碼;通過同樣的按鈕啓動 - 停止定時器

按鈕動作;

private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {          

     if(Button.getText().equals("START")){ 
     Button.setText("STOP"); 
     Spinner.setEnabled(false); 
     Informer.setBackground(Color.green); 
     Informer.setText("Running"); 
     Timer time = new Timer(); 
     ScheduledTask st = new ScheduledTask(); 
     time.schedule(st, 0, (int) Spinner.getValue()*1000*60); 
     } 
     else{ 
     Button.setText("START"); 
     Spinner.setEnabled(true); 
     Informer.setBackground(Color.red); 
     Informer.setText("Stopped"); 

     } 

    } 

當用戶按下按鈕;按鈕名稱從START STOP改變, 命名舉報人文本框油漆綠色和運行, 寫及以下啓動定時器,

public class ScheduledTask extends TimerTask { 

    public void run() { 
     if (Button.getText().equals("STOP")){ 
        Worker1 worker1 = new Worker1(); 
        worker1.execute(); 
       } 
       else{ 
       ScheduledTask.this.cancel(); 
       } 
    } 
} 

正如你可以看到計時器執行的SwingWorker命名worker1。如果我再次按下按鈕(名爲STOP),jbutton重命名爲START並且定時器在按鈕文本中看不到停止,而不是停止自身。

想象一下,設置定時器1分鐘,然後按下START按鈕。當START按鈕按下worker1立即執行並且定時器開始倒計時時,您知道。在20-30秒內按停止按鈕並等待5-10秒。再次按下START按鈕。問題在這裏2計時器已經在運行了。當第一次計時器倒計時完成時,worker1執行。 5-10秒後,定時器fininsh老倒計時,並再次啓動worker1。

如果任何倒計時已經激活,如何在同一按鈕按下時停止當前計時器倒計時?

+0

這裏不要使用'TimerTask'。相反,實現一個Swing'Timer'用於重複執行任務或者一個'SwingWorker'用於長時間運行的任務。有關更多詳細信息,請參見[Swing中的併發](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 –

+0

爲了儘快提供更好的幫助,請發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整和可驗證示例)。 –

回答

0

你可以在同一個地方使用兩個不同的按鈕。 首先,當按下啓動按鈕時,計時器將啓動並且按鈕將隱藏並且停止按鈕將會出現,反之亦然。

+0

我可以使用這種方法,而不是一個按鈕謝謝你的建議。 –

0

普萊姆根本不在擺動JButtons。

問題是您沒有正確取消工作任務。這裏:

if (Button.getText().equals("STOP")){ 
       Worker1 worker1 = new Worker1(); 
       worker1.execute(); 
    } 
    else{ 
      ScheduledTask.this.cancel(); 
    } 

你不能保證當定時器完成時按鈕將有文本「停止」。

當您按下停止按鈕時,您需要停止計時器本身,以防止首先啓動您的計劃任務。

+0

你確實是對的。但是,如果我使用相同的按鈕啓動 - 停止操作,我必須使用ButtonAction中的條件,你知道。如果子句之外我如何停止當前定時器? –

+0

是的,你會neet使用,如果條件。停止計時器內部如果條件完全正常,如果您要求如何停止計時器,請檢查前三個搜索結果「java取消計時器」 – kajacx

+0

但是,在我的按鈕操作代碼中,其他條件下未識別時間變量。那麼當按下相同的按鈕時,如何停止當前激活的TimerTask? –

相關問題