Ich habe eine Java-GUI-Anwendung, von der eine andere Java-GUI-Anwendung durch Reflexion und Laden aufgerufen wird. Es funktioniert gut, das einzige Problem ist, dass beim Schließen der JFrame
der aufgerufenen Anwendung der Anwendungsrahmen Main GUI
ebenfalls geschlossen wird. Wie kann ich verhindern, dass die Hauptanwendung (Frame) geschlossen wird?
Ich kann die defaultCloseOperation
der aufgerufenen Anwendung nicht ändern. Es kann jedoch eine Änderung an der Hauptanwendung vorgenommen werden. Hat es etwas mit Threads zu tun?
Dies ist mein Anwendungscode, der eine Zielanwendung ausführt
%Vor%Ich darf keine Änderungen an der aufgerufenen Anwendung vornehmen.
Das war ein Kommentar als Antwort auf @JeffLaJoie, nur um zu verdeutlichen, dass keine Änderungen am Code der anderen App erforderlich wären, nur ein zusätzlicher Methodenaufruf oder zwei von Ihr App. zur Laufzeit, um den Close-Vorgang des 3rd-Party-Frames festzulegen.
Wenn dies nicht gelingt, ist die beste Lösung, die ich mir vorstellen kann, den neuen Frame in einem separaten Process
zu starten, der eine neue JVM startet, wenn der Benutzer die andere App schließt. Er und die zweite JVM werden beendet, während sie gehen die ursprüngliche App. auf dem Bildschirm.
Sie möchten die Operation DISPOSE_ON_CLOSE verwenden, also wäre es setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)
EXIT_ON_CLOSE wäre die Option, die alle Fenster schließt, von denen ich glaube, dass sie gerade aktuell sind.
Sie haben die folgenden Optionen für defaultCloseOperation
:
DO_NOTHING_ON_CLOSE
- Der Do-Nothing-Standard-Fenster-Schließvorgang; HIDE_ON_CLOSE
- Die Standardfenster-Operation zum Verbergen des Fensters, DISPOSE_ON_CLOSE
- Das Fenster zum Schließen des Standardfensters für das Dispo-Fenster. EXIT_ON_CLOSE
- Die Standardfensteroperation zum Beenden der Anwendung. Der Versuch, dies unter Windows, das dies unterstützt, wie JFrame, zu setzen, kann eine SecurityException basierend auf dem SecurityManager auslösen. Es wird empfohlen, dass Sie dies nur in einer Anwendung verwenden. Die Option DISPOSE_ON_CLOSE
könnte verwendet werden, um zu vermeiden, dass alle Fenster geschlossen werden und nur das gewünschte Fenster geschlossen wird.
Wenn Sie keinen direkten Zugriff auf das JFrame-Objekt haben, wie Sie es mit dem letzten veröffentlichten Code getan haben, können Sie Window.getWindows () , um alle Windows-Instanzen zu erhalten (da JFrame
auch Window
ist, wird es ebenfalls aufgelistet). Und dann setze defaultCloseOperation
darauf.
Möglicherweise müssen Sie Threads verwenden, da defaultCloseOperation
nach dem Aufruf der main-Methode festgelegt werden muss.
Theoretisch funktioniert es, also denke ich, das ist eine gute Aufnahme;)
Tags und Links java user-interface swing jframe windowlistener