In meiner Java-Anwendung mit einer Swing-GUI möchte ich folgendes erreichen.
Es läuft ein Nicht-GUI-Thread, der einige Arbeiten ausführt. An einem bestimmten Punkt benötigt dieser Thread eine Eingabe des Benutzers, bevor er fortfahren kann. Dann möchte ich einige Änderungen an der grafischen Benutzeroberfläche vornehmen, eine bestimmte GUI-Aktion abwarten (z. B. das Drücken der Schaltfläche "OK" durch den Benutzer), die eingegebenen Daten von der grafischen Benutzeroberfläche an den Nicht-GUI-Thread weiterleiten und ihn mit der Berechnung fortfahren lassen.
Wenn ich mich umschaue, habe ich eine Menge Informationen darüber gefunden, wie man die Ausführung einer (lange laufenden) Aufgabe vom Swing-GUI-Thread auf einem anderen Thread initiiert, aber nichts zu meinem Problem.
SwingUtilites.invokeAndWait
klingt so, als ob es die Aufgabe erfüllen würde, aber zunächst braucht es eine Runnable
Argument anstelle eines Callable
Es gibt also keine einfache Möglichkeit, ein Ergebnis zurückzugeben, und zweitens löst es nicht das Problem des Wartens auf ein bestimmtes GUI-Ereignis.
Ich weiß, dass ich meine eigene Lösung finden könnte, indem ich z. B. eine CountDownLatch
Das Problem scheint mir jedoch so häufig aufzutreten, dass es eine Standardlösung geben sollte.
Meine Fragen lauten also: Ist dies wirklich ein häufiges Problem, und wenn ja, gibt es eine Lösung in der Standardbibliothek / Bibliotheken? Wenn es keine Standardlösung gibt, wie würden Sie es lösen? Wenn dieses Problem nicht häufig auftritt, warum nicht?