我嘗試通過相同的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。
如果任何倒計時已經激活,如何在同一按鈕按下時停止當前計時器倒計時?
這裏不要使用'TimerTask'。相反,實現一個Swing'Timer'用於重複執行任務或者一個'SwingWorker'用於長時間運行的任務。有關更多詳細信息,請參見[Swing中的併發](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 –
爲了儘快提供更好的幫助,請發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整和可驗證示例)。 –