Java Timer, dublowanie sie timera przy wywoływaniu

0

Hej! Jestem przy końcu pisania małego programu, który zawiera Timer. Timer jest podpięty do przycisku który go wywołuje. Problem jest taki, że Timer przy kolejnych klikach w button tak jakby wywołuje się ponownie ale poprzedni nie zatrzymuje się(czyli odlicza dwa razy szybciej czas). Siedziałem nad tym wczoraj dość długo i nie mogłem nic na to zaradzić.

Tak to wygląda w kodzie:

//button
btn1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                time=60;
                setTimer();
            }
        } );

//metoda setTimer
public void setTimer() {
       final Timer t = new Timer(1000, new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                time--;
                timerLabel.setText(format(time / 60) + ":" + format(time % 60));
                if (time == 0) {
                    final Timer tt = (Timer) e.getSource();
                    timerLabel.setText("--:--");
                    tt.stop();
                }
            }
        });
        t.start();

Proszę o jakąś wskazówkę ;)

1
public void actionPerformed(ActionEvent e) {
				time = 60;
				if (t != null) {
					t.stop();
				}
				setTimer();
			}

To nie jest poprawne rozwiązanie ale działa. Pomoże Ci dalej główkować :)

0

@diligentia, dziękuje za wskazówke, jeszcze troche doczytałem na stacku i ostatecznie to wygląda tak:

//tworze globalną zmienną
private Timer t;

//button

        btn1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                time=60;
                if (t != null){
                    t.stop();
                }
                setTimer();
            }
        } );


//metoda setTimer();

public void setTimer() {
        t = new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                time--;
                timerLabel.setText(format(time / 60) + ":" + format(time % 60));
                if (time == 0) {
                    timerLabel.setText("--:--");
                    t.stop();
                }
            }
        });
     t.start();
}

Może komuś się przyda do stworzenia prostego timera ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1