# Timer in Java 1.1.x



## MannImMond (30. Dez 2005)

Hallo. Ich habe ein Problem bei meinem Applet. ich möchte gern einen Timer einbauen, der mir alle x Sekunden eine Funktion meines Applets aufruft. 
Zunächst dachte ich an einen TimerTask. Doch dieser ist in Java 1.1.8 nicht verfügbar. Auch die Klasse Timer nicht.

Hat Jemand eine alternative Idee? Wäre supi.


----------



## Campino (30. Dez 2005)

:arrow: Nimm ein aktuelles Java...


Prüfe in einem normalen Thread die Zeit (System.getTimeMills() oder so), speicher die erste Zeit, sobald die differenz zwischen erster und zweiter Zeit größer oder gleich deinem Interval ist, löst du die Aktionen aus und ersetzt den Startwert durch den aktuellen Zeitwert.
:meld: Aber ein neues Java ist definitiv die bessere Lösung!


----------



## MannImMond (30. Dez 2005)

Campino hat gesagt.:
			
		

> :arrow: Nimm ein aktuelles Java...



Aus Kompatibilitätsgründen leider nicht möglich.



			
				Campino hat gesagt.:
			
		

> Prüfe in einem normalen Thread die Zeit (System.getTimeMills() oder so), speicher die erste Zeit, sobald die differenz zwischen erster und zweiter Zeit größer oder gleich deinem Interval ist, löst du die Aktionen aus und ersetzt den Startwert durch den aktuellen Zeitwert.



Ich denke, benötige auf jedenfall einen 2. Thread, der mir die Funktion zyklisch aufruft. Dann könnte ich auch mit ner Schleife und sleep arbeiten oder? Ist das mit java 1.1.8 umsetzbar?


----------



## Campino (30. Dez 2005)

Stimmt, dass geht auch...


----------



## MannImMond (30. Dez 2005)

Und wie würde die Implementation eines solchen Threads aussehen?

habe folgendes:

```
public class diagram extends java.applet.Applet {  

  ...

  public synchronized void init() {
      ...
      timertask=new Task(this);
      timertask.setPriority(1);
      timertask.run();
      System.out.println("Init fertig");
  }

  public void updateDiagram() {
	  
      bGetNewData=true;
	  repaint();
  }

}

class Task extends Thread {
  private diagram theInstance;
  
  public Task(diagram instance){
	  theInstance=instance;
  }
  
  public void run(){
	  System.out.println("Timer: run()");
	  while(true){
		  try{
			  System.out.println("neue runde");
			  sleep(10000);
		  }
		  catch(InterruptedException e){
			  System.err.println("Timer-Exception: kein sleep()");
		  }
		  theInstance.updateDiagram();
	  }
  }
}
```

Sobald ich aber die Funktion run() des Threads in der init() Funktion meines Applets aufrufe, hängt mein Applet. Nur die Timer-Funktion run() scheint dann noch zu laufen.  "Init fertig" wird also gar nicht in der Konsole ausgegeben, "neue runde" jedoch schon alle 10sek. 
Auch das Ändern der Prioritäten hat nichts geholfen.


----------



## MannImMond (30. Dez 2005)

Fehler gefunden. 

muss heißen: timertask.start()


----------



## MannImMond (30. Dez 2005)

So wenn ich das Applet in Eclipse starte funktionier alles bestens. Wenn ich das Applet aber gepackt auf meinen webserver lege und in einen html-code einbinde bekomme ich ein "NoClassDefFoundError"-Exception.
Ohne diesen zusätzlichen Thread funktioniert das ganze jedoch. Hat Jemand eine Idee?


----------



## Campino (30. Dez 2005)

MannImMond hat gesagt.:
			
		

> So wenn ich das Applet in Eclipse starte funktionier alles bestens. Wenn ich das Applet aber gepackt auf meinen webserver lege und in einen html-code einbinde bekomme ich ein "NoClassDefFoundError"-Exception.
> Ohne diesen zusätzlichen Thread funktioniert das ganze jedoch. Hat Jemand eine Idee?



NoClassDefFound heißt, dass eine Klasse nicht gefunden werden konnte. In der fehlermeldung steht drin welche, dann guckst du ob die in deinem package ist oder wo die sein sollte und warum sie da nicht ist...

eclipse vergisst beim jar packen gelegentlich Dateien, , weil ein jar-Archiv eigentlich ein zip-Archiv ist, kann man die mit 7zip, WinZip oder sowas nachlegen...


----------

