2016-07-08 7 views
1

Ich habe eine Starttaste, die einen Timer mit einer Schleife startet.Stoppe einen Timer mit einer Taste

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); 
} 

Und ich habe einen anderen 'Stop' Button. Zur Zeit stoppe ich die Schleife, indem ich sie kaputt mache und eine Ausnahme erhalte. Offensichtlich nicht die richtige Prozedur und stoppt auch den Startknopf von der Arbeit.

Meine Frage ist, wie kann ich es richtig stoppen, damit ich danach neu starten kann?

+0

Mögliche Duplikate von [Wie man einen Timer in Java zu stoppen] (http://stackoverflow.com/questions/33726952/how-to-stop-a-timer-in-java) – karan

Antwort

2

Behalten Sie einfach eine Referenz des Timers (eine Variable) und rufen Sie die cancel() Methode auf.

In startTourButtonActionPerformed

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

In stopTourButtonActionPerformed

timer.cancel(); 

Notiere die es alle Ihre timer ‚Aufgaben stornieren. Es gibt auch eine cancel() Methode für eine TimerTask, wenn Sie nur eine einzelne Aufgabe genau stoppen möchten.

+0

Dank C.Champagne. Ich war 99% dort. geschützter java.util.Timer-Timer; war was ich brauchte. –