Slyh: Eine Sekunde warten

Beitrag lesen

Hallo,

Hatte den Code auch bei meiner Suche gefunden, dachte aber der wär nur für Threads.

Es laufen immer mehrere Threads in einer VM. Mindestens der Thread, in
der deine Haupt-Applikation läuft (Main-Thread) und dann der Thread mit
dem Garbage Collector.
Alle Thread-Klassen und -Methoden kannst du daher auch dann einsetzen,
wenn du nicht explizit mit Threads arbeitest. Der Main-Thread deiner
Applikation ist ja immer vorhanden.

Den aktuellen Thread kriegst du über diese statische Methode raus:
  Thread.currentThread()

Da du jetzt gerade Applets schreibst, also grafisch programmierst, bist
du aber ohnehin multithreaded, da insbesondere Events im sogenannten
Event-Dispatch-Thread abgearbeitet werden. (Wenn du nicht weißt, was
das ist, dann solltest du ggf. googeln oder eines der (ggf. kostenlosen)
Bücher danach befragen.)

Jedenfalls werden in der Zeit, in der du gerade einen Event verarbeitest,
keine weiteren Events mehr ausgeliefert. Da aber auch Zeichenanforderungen
etc. über den Event-Dispatch-Thread laufen, werden diese solange nicht
ausgeführt, wie du in deiner Event-Behandlungsmethode hängst.

Jetzt kommt aber das nächste Problem:
Wenn ich den Kram öffne, steht 5 Sekunden lag "Applet loaded." da. Erst nach 5 Sekunden erscheint dann der Text "Fertig mit warten". Die anderen Ausgaben waren gar nicht zu sehen.

Weil du vermutlich in einer Event-Behandlungsmethode diese 5 Sekunden
wartest und daher jede andere Event-Verarbeitung blockierst. Erst nach
den 5 Sekunden wird die Methode beendet und es können weitere Events, z.B.
für Grafikoperationen abgearbeitet werden.

Ich muss also irgendwie diese Ausgabe erzwingen.
In VisualBasic geht das mit "do events".

Geht das irgendwie auch mit Java?

Nicht so direkt, nein. (VB funktioniert intern auch etwas anders als Java. :-))

Ich weiß nicht so genau, was du vorhast. Soll der Inhalt der TextArea
einfach jede Sekunden erneuert werden?
Dann könntest du eine der beiden Timer-Klassen verwenden. Oder du startest
einen neuen Thread, der jede Sekunde Änderungen an der TextArea vornimmt.
Den prinzipiellen Code hast du ja schon. Jetzt mußt du das ganze
nur noch in einen Thread einbinden und diesen starten. Wie das geht, steht
in jedem Java-Buch beschrieben. Das ist alles kein Hexenwerk. :)
Oder du fragst bei Bedarf einfach nochmal hier.

Gruß
Slyh