Frage von tellme84, 9

java thread in actionlistener?

Hallo! Habe folgendes Problem mit Java und Swing: Ich habe ein Programm mit einem Fenster, in diesen Fenster wird die Zeit in Sekunden gezählt. Dies geschied über einen Thread der mit sleep(1000), immer eine kurze pause macht , und eine zählervariabel um 1 hochzält.und einem JLabel die neue Zeit übergibt. Wenn ich den Code zum Starten des Threats in die initView packe , zählt das programm brav die Zeit. ich möchte aber das das mein Programm erst bei dem druck, auf ein JButton anfängt, wenn ich jetzt den code zum starten des Thrads in den actionlistener vom JButton packe , führt er alles aus bis zur schleife und dort friert er ein... `Was kann ich machen.?

Antwort
von DexterNemrod, 1

Als Reaktion auf den Code, den du in der anderen Antwort gepostet hast:

Lösche die Funktion "start" und benenne "ausführen" in "run" um. Ein Thread funktioniert so, dass er mit start() gestartet wird. Das findet noch im aufrufenden Thread statt. Die Funktion run() ist die, die nebenläufig ausgeführt wird.

Wenn du in Swing mit zusätzlichen Threads arbeitest, musst du immer bedenken, dass Swing nicht Thread-safe ist. Jede Modifikation der UI muss auf dem EventThread geschehen.

In der Klasse SwingUtilities gibt es eine Funktion namens "invokeLater" - dieser übergibst du ein Runnable, was dann bei nächster Gelegenheit vom EventThread aus aufgerufen wird.

Ersetze die Zeile

lblAusgabe.setText(Integer.toString(zahl) + " Sekunden.");

durch

SwingUtilities.invokeLater( () -> lblAusgabe.setText(Integer.toString(zahl) + " Sekunden.") );


Antwort
von Borgler94, 5

bekommst du eine Exception, wenn ja, welche?

Kommentar von tellme84 ,

Leider bekomme ich keine, das programm friert einfach ein und ich mus den terminate knopf in der konsole drücken

Kommentar von Borgler94 ,

magst du deinen Code bitte auf http://hastebin.com/  einfügen und dann den link dazu hier kommentieren

Kommentar von tellme84 ,
Kommentar von tellme84 ,

sry habe da im vorrigen linke einen irreführenden kommetar eingebaut hier noch mal ohne:

http://hastebin.com/rizabawedu.scala

Keine passende Antwort gefunden?

Fragen Sie die Community