Mobile Footer Layer

Java showMessageDialog friert Applet/Browser ein

DaysShadow

Admiral
Registriert
Jan. 2009
Beiträge
9.267
Hi,

ich habe eine Anwendung die bei einem Fehler über JOption.showMessageDialog eben ein Nachrichtenfenster öffnet, damit der User weiß was los ist.

Die Anwendung habe ich sowohl als normale Anwendung auf dem Rechner als auch als Applet, dabei funktioniert der Dialog bei der normalen Anwendung, bei dem Applet friert es mir aber den ganzen Browser ein.
Ich sehe den Dialog, kann aber nicht auf OK klicken und auch sonst reagiert der Browser nicht mehr, getestet mit Opera und IE, bei beiden das gleiche Ergebnis.

Hat jemand eine Idee was da los ist und woran das liegen könnte?
Die Applet jars sind signiert und alles, muss ich, da die Anwendung sonst nicht laufen würde( benutzt libgdx ).

Die Java Konsole gibt leider auch nichts aus, also tritt auch kein Fehler auf was Java betrifft.

Danke!
 
Könnte ein Deadlock sein. Schau Dir den Threadstack des Java-Prozesses an. Geht von der Kommandozeile (jps/jstack) oder z.B. mit JConsole, um die Bordmittel zu nennen.
 
Jup, ich scheine einen Deadlock zu verursachen, meine eigentliche Anwendung die als LWJGL Application in JConsole aufgeführt ist wartet auf java.awt.Component$AWTTreeLock.

Werde mich wohl Morgen damit beschäftigen müssen, aber vielen Dank für den Tipp, kannte die Tools noch gar nicht und so weiß ich wenigstens schonmal womit ich es ungefähr zu tun habe.

Danke!

Edit: Ich habe das Problem mit einer Runnable-Instanz und SwingUtilities.invokeLater( runnable ) lösen können, das Problem ist gewesen, dass das Erzeugen des Dialogs im Applet wohl zu Problemen mit dem Event Dispatch Thread geführt hat und bei der normalen Anwendung nicht.
Durch die Änderung funktioniert es nun.

Daher nochmals vielen Dank für den Hinweis, denn ich bin mir sicher ich hätte wieder tagelang gesucht, da ich ja nicht wusste wonach ich suchen muss ;)
 
Zuletzt bearbeitet:
Ohne den Code zu kennen: AWT/Swing Code ist immer im EDT auszuführen. Macht man dies nicht, kann es unter Umständen zum Deadlock führen. Könnte hier der Fall sein.

Swing stellt leider nicht von alleine sicher, dass diese Regel eingehalten wird, bei SWT z.B. ist das besser gelöst. Man kann aber selbst Abhilfe schaffen: http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html
 
Zuletzt bearbeitet: (Edit: Zu spät :))
Zurück
Oben