簡體   English   中英

通過同一按鈕的起停計時器

[英]Start-Stop timer via same Button

我嘗試通過相同的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");

        }

    }

當用戶按下按鈕時; 按鈕名稱從“開始”的“停止”更改為“通知者”文本字段的塗色為綠色,並在“正在運行”中寫入內容,然后在計時器下方啟動

public class ScheduledTask extends TimerTask {

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

如您所見,計時器執行名為worker1的SwingWorker。 如果我再次按下按鈕(命名為STOP),則將jbutton重命名為START,而計時器在按鈕文本中看不到STOP,而是停止本身。

想象一下將計時器設置為1分鍾,然后按開始按鈕。 當按下開始按鈕時,worker1立即執行,並且計時器開始倒計時。 在20-30秒內,按STOP按鈕,然后等待5-10秒。 再次按開始按鈕。 問題是這里2個計時器現在已經在運行。 第一次倒計時完成時,worker1將執行。 5到10秒后,計時器fininsh繼續倒數計時,然后再次啟動worker1。

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

您可以在同一位置使用兩個不同的按鈕。 首先,當按下開始按鈕時,計時器將啟動,按鈕將被隱藏,停止按鈕將出現,反之亦然。

問題完全不在JButtons中。

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

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

您不能保證定時器完成后按鈕上的文字將為“ STOP”。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM