Stoper - problem z resetowaniem

0

Witam
Tworzę grę w NB (puzzle) w której znajduje się stoper. Grę rozpoczyna się poprzez kliknięcie przycisku "wymieszaj" a kończy po ułożeniu całej układanki poprzez użycie funkcji timer.cancel();. Przy takim działaniu stoper działa prawidłowo.
Problem występuje w przypadku gdy w trakcie gry (w trakcie pracy stopera) ponownie zostanie wciśnięty przycisk wymieszaj. Wówczas stoper mierzy na przemian pierwszy jak i drugi czas np. jeśli zostanie kliknięty przycisk w 3s to wyświetlane są następujące wartość: 0 3 1 4 2 5 3 6 itd.
Próbowałem umieścić w przycisku najpierw funkcję cancel a po niej ponowne wystartować stoper ale program się wysypuje. Prosiłbym o jasną podpowiedź bo szczerze to funkcja schedule jak i timetask są zbyt mocno rozbudowane jak dla mnie.
Z góry dziękuję za pomoc :)
Kod stopera:

public void stoper()
    {
        final long rozpocznij;
        timer = new Timer();
        rozpocznij = System.currentTimeMillis()/1000;

        timer.schedule(
              new TimerTask() 
                         {
                                public void run() 
                                {
                                   long s, m;
                                   s=0;
                                   m=0;
                                   s = System.currentTimeMillis()/1000 - rozpocznij;

                                   if(s<60)
                                        {
                                            time.setText(" czas: "+s+"s");
                                           }
                                   else
                                    {
                                      m = s/60; 
                                      s = s%60;
                                      time.setText(" czas: "+m+"min "+s+"s");
                                    }
                                }
                           }, 0, 1000);
      }
1

W takiej sytuacji chodzą dwa timery. Rozwiązanie zależy od tego czy po kliknięciu w przycisk wymieszaj zużyty do tej pory czas ma być anulowany.
Pierwsza propozycja, to:

if(timer!=null)
{
    timer.cancel();
}
timer=new Timer()
0

Hmm... Nie myślałem, że to będzie takie proste :D
Skoro to już zrobione to można dodawać kolejne funkcje.
Dziękuje serdecznie.

0

Jeżeli Twój Timer faktycznie ma zajmować się tylko updatem jakiegoś labela (czy czegoś w tym stylu) możesz zainteresować się klasą Timer z pakietu javax.swing. Zaleta jest taka, że każda akcja odpalana jest w EDT (a zasadniczo każda zmiana GUI powinna być w EDT robiona)

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