Hallo,
ich bin momentan dabei mir eine kleine GUI in JavaFX 2 zu basteln. Die GUI habe ich in SceneBuilder gebastelt und ist somit in fxml.
Soweit so gut. Nun habe ich am Ende gemerkt, dass der Controller im selben Thread läuft wie die GUI selber und sich alles aufhängt bei zeitintensiven Aufgaben.
Habe mich dann direkt in das Thema eingelesen und bin vermutlich jetzt noch verwirrter als davor. Anscheinend gibt es zich Wege, mindestens 5 (vermutlich waren es nur 1-3 nur in verschiedenen Schreibweisen), wie man einen Thread richtig einbaut (habe nie vorher mit Threads gearbeitet).
Kann mich eventuell einer Aufklären wie ich folgendes realisieren kann (auf GUI Basis, Google ist nur die zeitaufwändige nebensächliche Tätigkeit)?:
Ich habe eine GUI mit einem Label, einem Input und einem Button. Wenn ich auf den Button klicke, dann soll der Button deaktiviert werden & beim Label "Bitte warten ..." stehen. Danach soll das Input ausgelesen werden und demnach gegoogelt werden. Der erste Titel von Google soll dann ins Label gekloppt werden und der Button wieder aktiviert werden.
Alles schön und gut. Wenn ich es mit diesem runLater mache, dann brauche ich pro live Aktualisierung jedes Mal ~5 Zeilen Code, nur damit da steht "Bitte warten ..." und/oder der Button deaktiviert wird (hierzu gleich mehr). Oder ich mache es über einen Task, den ich dann an z.B NUR ans Label binde (oder habe ich da was falsch verstanden?) und kann dann über updateMessage nur dieses Label aktualisieren. Somit wird der Button erst am Ende meiner Tätigkeit deaktiviert und danach sofort wieder aktiviert.
Nächstes witziges Szenario: runLater ...
Wenn ich z.B. einen Countdown habe, müsste ich dieses runLater jedes Mal erneut ausführen, wenn ich die Zahl höher setze um diese direkt zu sehen. Also gar nicht mal so toll.
Viel Geschreibe, wenig Sinn ... könnte sich jemand eventuell die Zeit nehmen das Thema schön ausführlich mit vollständigen Beispielen (durch Google habe ich nie was Vollständiges gefunden was es richtig erklärt) zu erklären? Ich bin mir sicher, dass ich nicht der Einzige bin, der solche Probleme damit hat.
Ich bin für eure Hilfe sehr dankbar.
MfG
tr33
PS: das Beispiel mit Google kann man durch einen Zähler ersetzen der dann z.B. je nachdem welche Zahl eingegeben hat hoch zählt. Mir ist es hierbei jedoch wichtig, dass ich nicht nur Texte aktuelleren kann, sondern auch z.B. einen Button de/aktivieren kann.
ich bin momentan dabei mir eine kleine GUI in JavaFX 2 zu basteln. Die GUI habe ich in SceneBuilder gebastelt und ist somit in fxml.
Soweit so gut. Nun habe ich am Ende gemerkt, dass der Controller im selben Thread läuft wie die GUI selber und sich alles aufhängt bei zeitintensiven Aufgaben.
Habe mich dann direkt in das Thema eingelesen und bin vermutlich jetzt noch verwirrter als davor. Anscheinend gibt es zich Wege, mindestens 5 (vermutlich waren es nur 1-3 nur in verschiedenen Schreibweisen), wie man einen Thread richtig einbaut (habe nie vorher mit Threads gearbeitet).
Kann mich eventuell einer Aufklären wie ich folgendes realisieren kann (auf GUI Basis, Google ist nur die zeitaufwändige nebensächliche Tätigkeit)?:
Ich habe eine GUI mit einem Label, einem Input und einem Button. Wenn ich auf den Button klicke, dann soll der Button deaktiviert werden & beim Label "Bitte warten ..." stehen. Danach soll das Input ausgelesen werden und demnach gegoogelt werden. Der erste Titel von Google soll dann ins Label gekloppt werden und der Button wieder aktiviert werden.
Alles schön und gut. Wenn ich es mit diesem runLater mache, dann brauche ich pro live Aktualisierung jedes Mal ~5 Zeilen Code, nur damit da steht "Bitte warten ..." und/oder der Button deaktiviert wird (hierzu gleich mehr). Oder ich mache es über einen Task, den ich dann an z.B NUR ans Label binde (oder habe ich da was falsch verstanden?) und kann dann über updateMessage nur dieses Label aktualisieren. Somit wird der Button erst am Ende meiner Tätigkeit deaktiviert und danach sofort wieder aktiviert.
Nächstes witziges Szenario: runLater ...
Wenn ich z.B. einen Countdown habe, müsste ich dieses runLater jedes Mal erneut ausführen, wenn ich die Zahl höher setze um diese direkt zu sehen. Also gar nicht mal so toll.
Viel Geschreibe, wenig Sinn ... könnte sich jemand eventuell die Zeit nehmen das Thema schön ausführlich mit vollständigen Beispielen (durch Google habe ich nie was Vollständiges gefunden was es richtig erklärt) zu erklären? Ich bin mir sicher, dass ich nicht der Einzige bin, der solche Probleme damit hat.
Ich bin für eure Hilfe sehr dankbar.
MfG
tr33
PS: das Beispiel mit Google kann man durch einen Zähler ersetzen der dann z.B. je nachdem welche Zahl eingegeben hat hoch zählt. Mir ist es hierbei jedoch wichtig, dass ich nicht nur Texte aktuelleren kann, sondern auch z.B. einen Button de/aktivieren kann.