Timer

0

Witam, uczę się Javy z książki Java 2 Podstawy Horstmana z 2003 roku i mam następujący problem. W jednym z przykładów występuje błąd w konstruktorze klasy Timer:

ActionListener sumator = new SumatorOdsetek(stopa);
   Timer t = new Timer(1000, sumator);

//The constructor Timer(int, ActionListener) is undefined

Ponadto eclipse podpowiada, aby rzutować na ActionListener albo zmienić typ argumentu sumator...niestety rzutowanie nic nie daje, a zmiana argumentu nie wchodzi chyba w grę...

Cała klasa wygląda tak:

class KontoBankowe
 {
  /**
   Metoda tworzy konto bankowe o podanym stanie początkowym
   @param stanPoczatkowy stan początkowy
  */
  public KontoBankowe(double stanPoczatkowy)
  {
   stan = stanPoczatkowy;
  }
 
  /**
   Metoda rozpoczyna symulację, w której odsetki są dodawane co 
   sekundę
   @param stopa stopa odsetek w procentach
  */
  public void start(double stopa)
  {
   ActionListener sumator = new SumatorOdsetek(stopa);
   Timer t = new Timer(1000, (java.awt.event.ActionListener) sumator);
   t.start();
  }
 
  private double stan;

  /**
   Ta klasa dodaje odsetki do konta bankowego
   Stoper wywołuje metodę actionPerformed
  */
 private class SumatorOdsetek implements ActionListener
 {
  public SumatorOdsetek(double aStopa)
  {
   stopa = aStopa;
  }

  public void actionPerformed(ActionEvent zdarzenie)
  {
   // aktualizuj odsetki
   double odsetki = stan * stopa / 100;
   stan += odsetki;

   // pokaż obecny stan konta
   NumberFormat formator = NumberFormat.getCurrencyInstance();
   System.out.println("stan = " + formator.format(stan));
  }

  private double stopa;
 }
}

<font size="3">
// popraw temat!
</span>
- deti

0

Są dwie klasy Timer:
javax.swing.Timer
java.util.Timer
Jaka zostanie w instrukcji

Timer timer=new Timer(...)

zależy od deklaracji importu. Jeżeli masz

import java.util.*;

to napisz

javax.swing.Timer timer=new javax.swing.Timer(...);
0

mam Timer z javax.swing, ponadto obie deklaracje nie działają...

a może błąd jest przy interfejsie ActionListener...bo ja go sam zadeklarowałem:

import java.awt.event.*;

public interface ActionListener 
{
	void actionPerformed(ActionEvent zdarzenie);
}
0

A można wiedzieć po co?

0
bogdans_niezalogowany napisał(a)

A można wiedzieć po co?
myślałem, że trzeba...ale potem dopiero w dokumentacji zauważyłem, że jest już taki interfejs:P usunąłem go i javax.swing.Timer t = new javax.swing.Timer(1000, sumator); działa! dzięki wielkie!

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