Java setContentPanel -> freeze der GUI

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.721
Guten Tag zusammen,

Ich habe nun endlich meine Anwendung soweit programmiert, dass ich einen Server, ein Client und die entsprechende GUI dazu habe. Die GUI hat bisher auch funktioniert, allerdings ohne Server. Und mit funktioniert meine ich, dass das Content Panel geswitcht wurde. Jetzt wollte ich das ganze allerdings mal testen, nur funktioniert das leider nicht... :/

Kann mir jemand sagen, wie ich diesen Bug behebe?

Wer zu viel Zeit hat, kann sich gerne mal das komplette Package ziehen und selber nachschauen.
Das ganze wird mit IntelliJ und der Launcher.java Klasse gestartet. Um den Server zu starten, muss ein Argument beim starten übergeben werde. In diesem Fall der Server. Sollte der Server gestartet werden wollen, einfach ohne Parameter starten.

https://www.dropbox.com/s/zki74571fykontv/Quiz.rar?dl=0

Würde mich freuen. MfG und Danke!
 
Wenn die GUI einfriert ist das ein Zeichen dafür, dass der Dispatcher-Thread blockiert wird. Möglicherweise auch durch eine ungewollte Endlosschleife. Einfach mal einen Breakpoint an die betroffene Stelle setzen und gucken.
 
Das wird das Problem sein, die Client-/Server-Kommunikation blockiert die GUI weil beide im selben Thread laufen.

Das nächste Problem wird auftauchen, wenn du dann zwei Threads benutzt. Wenn der Client im Kommunikations-Thread eine Nachricht empfängt, darf er nicht einfach unkoordiniert die GUI aktualisieren. Alle Aktualisierungen, also GUI-API-Aufrufe, müssen vom GUI-Thread aus erfolgen. Für Swing gibt es dafür SwingWorker und SwingUtilities.invokeLater und Co.
 
Ich bin gerade blind. Wo seht ihr den, dass die Client-/Server-Kommunikation im selben Thread laufen?
 
Das sind Vermutungen; GUI friert ein, wenn sie blockiert wird. Ich hab leider kein RAR.
Wenn du denn schon mehrere Threads hast, benutzt du auch schon invokeLater oder SwingWorker?

PS: dein überheblicher Unterton ist eher kontraproduktiv, findest du nicht? Rede Fakten und nicht so ein Blabla.
 
Wenn ein Java-Programm hängt, schaue ich mir zuerst die CPU-Last an und mache einen Thread-Dump. Damit kann man sehen, was das Programm gerade macht bzw. womit es nicht weiter kommt.

Wenn man den Quelltext hat, kann man so schnell die Stelle finden, die man debuggen muss. Wenn man das Programm gerade erst selbst geschrieben hat, würde ich annehmen, dass man die passende Stelle auch so findet.

Wenn ich mir (ob in einem Forum oder sonst wo) Hilfe erhoffe, würde ich genau beschreiben, wie der Fehler zu reproduzieren ist. Der Hänger tritt wohl nach einer bestimmten Aktion auf?
 
Zurück
Oben