In meinem aktuellen Projekt ist folgendes Problem aufgetreten: Nach umfassenden Änderungen an meiner Gui (Swing), die anderweitig sehr vieles verbessert und erst ermöglicht haben, ist nun ein seltsamer Seiteneffekt aufgetreten. Zunächst der grundlegende Programmaufbau:
[ul]
[li] Programmoberfläche (A) des Hauptprogramms in einem JFrame mit Button zum Öffnen von B.
[/li] [li] Dialog (B) in einem JDialog mit dem eingebetteten Panel C
[/li] [li] Panel ©, ein JPanel mit verschiedenen Fenster und Buttons. Einer davon öffnet den Fortschrittsdialog D
[/li] [li] Fortschrittsdialog D in einem JDialog (seit 1,5 Jahren unverändert).
[/li][/ul]
Wenn ich den Button, der D startet, nicht betätige, verhält sich das Programm völlig normal. Drücke ich diesen Button, so fällt zunächst nichts weiter auf. D wird angezeigt und am Ende des Ablaufs wieder geschlossen, ich kann B ganz normal beenden, doch dann “friert” mir A ein in der Weise, dass es in den Hintergrund geschickt wird. Hole ich das Fenster wieder hervor, kann ich weder irgendeines der selbst eingefügten Bedienelemente betätigen, noch reagiert es auf den kleinen Knopf [x] oben rechts zum Beenden.
So ein Verhalten ist mir völlig neu.
Mit Herumprobieren, Auskommentieren und Testen habe ich herausgefunden, dass der Fehler nicht auftritt, wenn ich den Fortschrittsdialog D nicht anzeige. Dieser weiß aber rein gar nichts von irgendwelchen anderen Gui-Elementen, er wird nur über den Fortschritt der im Hintergrund ablaufenden Arbeit informiert und schließt sich dann wieder. Auch habe ich ihn seit anderthalb Jahren gar nicht verändert gehabt.
Seine Verwendung muss also irgendeinen Seiteneffekt auslösen, der mir völlig rätselhaft ist.
Das zugrundeliegende System ist ein Windows 7. Der Fehler tritt auch auf einem anderen Rechner (ebenfalls Windows 7) auf und es ist auch kein Unterschied, ob ich aus Eclipse oder dem Jar-File starte.
Ich weiß, das ist alles furchtbar wage, aber hatte jemand schon mal etwas vergleichbares? Ich tappe völlig im Dunkeln, weil offensichtlich der gefundene Auslöser nicht die Fehlerursache ist.
Es wäre vielleicht noch anzumerken, dass weder B, C noch D die Programmoberfläche A in irgendeiner Form kennen. Direkt kann also gar nicht auf A eingewirkt werden, wobei ich auch überhaupt nicht wüsste, wie sich das beobachtete Verhalten bewusst herbeiführen ließe.
Wenn man den Fehler macht, lange Prozesse direkt im EDT zu starten, friert das Fenster zwar auch ein in dem Sinne, dass es nicht aktualisiert wird, aber der von Windows bereitgestellte Rahmen (mit dem [x] zum Schließen) funktioniert dann noch.