2016-11-05 2 views
0

Ich habe versucht, den Timer zu stoppen und diese jetzt Tage zu lösen, leider kein Glück, hofft, dass jemand in der Lage sein wird, zu helfen.Swing-Timer Ausgabe - Stop Timer

Die Idee ist, den Timer zu verwenden, um eine Schaltfläche klicken, die den Wert in dem Textfeld erhöht, damit ich den Timer in der Start-Taste habe, und ich möchte es in der Stopp-Taste stoppen.

, dass der Code, das ich hinter meinem Startknopf habe:

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

     javax.swing.Timer tm = new javax.swing.Timer(100, new ActionListener(){ 
      public void actionPerformed(ActionEvent evt) { 

       btAddOneActionPerformed(evt); 
       } 
     }); 
tm.start(); 

}

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

} 
+1

Für eine bessere Hilfe, Einrichtung und Unterhaltung der Veröffentlichung a [Minimal, Complete, und prüfbare Beispielprogramm] (http://stackoverflow.com/help/mcve). Wir wollen nicht Ihr gesamtes Programm sehen, sondern Sie sollten Ihren Code in das kleinste Bit, das noch kompiliert, zusammenfassen, keinen zusätzlichen Code haben, der für Ihr Problem nicht relevant ist, aber Ihr Problem immer noch demonstriert. Sie können das Problem sehr gut lösen, indem Sie einfach versuchen, den Fehler zu isolieren und zu entlarven. –

Antwort

1

Sie haben in Ihrem gepostet Code ein Problem des Umfangs bekommen: Ihr Timer-Variable, tm, erklärte Innerhalb der actionPerformed Methode Ihrer Start-Schaltfläche ist nur innerhalb dieser Methode sichtbar. Sie können also keinen brauchbaren Hinweis darauf finden, wenn Sie diese Methode nicht verwenden. Eine Lösung besteht darin, die Variable auf der Klassenebene als private Instanzvariable (nicht statisch) zu deklarieren und nur start() darauf innerhalb des Aktionslisteners der Startschaltfläche aufzurufen. Dadurch wird die Variable in der gesamten Klasse sichtbar, und der Listener der Stoppschaltfläche sollte seine Methoden aufrufen können.

z.B.

package pkg3; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.Timer; 

public class TimerDeclaration { 
    private static final int DELAY = 1000; 

    // the tm2 variable is visible throughout the class 
    private Timer tm2 = new Timer(DELAY, new TimerListener()); 

    private JButton btStartTimer1 = new JButton("Start Timer 1"); 
    private JButton btStartTimer2 = new JButton("Start Timer 2"); 

    public TimerDeclaration() { 
     btStartTimer1.addActionListener(e -> btStartTimer1ActionPerformed(e)); 
     btStartTimer2.addActionListener(e -> btStartTimer2ActionPerformed(e)); 
    } 

    private void btStartTimer2ActionPerformed(ActionEvent e) { 
     tm2.start(); // tm2 is visible throughout your program 
    } 

    private void btStartTimer1ActionPerformed(ActionEvent e) { 
     javax.swing.Timer tm = new javax.swing.Timer(100, new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 

       // btAddOneActionPerformed(evt); 
      } 
     }); 
     tm.start(); // this is only visible inside here!!! 
    } 

    private class TimerListener implements ActionListener { 
     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
    } 
} 
+0

Konnte ich ein Beispiel sehen? –

+0

@Jamesanderson: sicher. Bitte haben Sie einen Blick auf [diese Links] (http://stackoverflow.com/search?q=user%3A522444+swing+timer) sowie an der [Swing-Timer Tutorial] (http://docs.oracle.com /javase/tutorial/uiswing/misc/timer.html) –

+0

stört es mir zu zeigen, wie es in meinem Code aussehen würde? Tut mir leid, wenn ich problematisch bin. –