So verhindern Sie, dass JFrame geschlossen wird

7

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%     
Sanyam Goel 02.07.2012, 20:28
quelle

3 Antworten

3
  

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.

    
Andrew Thompson 03.07.2012, 07:21
quelle
11

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.

    
Jeff LaJoie 02.07.2012 20:31
quelle
6

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;)

    
Francisco Spaeth 02.07.2012 20:29
quelle