簡體   English   中英

用按鈕停止計時器

[英]Stop a timer with a button

我有一個啟動按鈕,可以循環啟動計時器。

public synchronized void startTourButtonActionPerformed(java.awt.event.ActionEvent evt) {
    new java.util.Timer().schedule(new java.util.TimerTask() {
        @Override
        public void run() {

            try {
                byte st = presetNo[count];
                System.out.println("Start Tour Button pressed, String:  " + st);

                // this part will run from 0 to max of presets every
                // counting.
                count++;
                if (count >= MaxCount)
                    count = 0;

                byte[] command = { (byte) startTx, address, byteOne, goPreset, 0x00, st, endTx, 0x0F };
                TwoWaySerialComm.SerialWriter sw = new TwoWaySerialComm.SerialWriter(
                        twoWaySerCom.serialPort.getOutputStream());

                sw.out.write(command);

            }

            catch (IOException e) {
                e.printStackTrace();
            }

        }
    }, 100, 5000);
}

我還有另一個“停止”按鈕。 目前,我正在通過中斷循環並獲取異常來停止循環。 顯然這不是正確的過程,並且還會停止啟動按鈕的工作。

public synchronized void stopTourButtonActionPerformed(java.awt.event.ActionEvent evt){
    count = -1;
}

我的問題是如何正確停止它,以便以后可以重新啟動?

只需保留計時器的引用(變量)並調用cancel()方法即可。

startTourButtonActionPerformed

//...
timer = new java.util.Timer();
timer.schedule(new java.util.TimerTask() {
//...

stopTourButtonActionPerformed

timer.cancel();

請注意,它將取消您所有timer的任務。 如果只想停止一個任務,則在TimerTask上還有一個cancel()方法。

暫無
暫無

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

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