2009-12-22 12 views

Odpowiedz

73

Jeśli nie nie chcą aplikacja do wypowiedzenia, gdy JFrame jest zamknięta, należy

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) 

zamiast

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Z documentation:

  • DO_NOTHING_ON_CLOSE (zdefiniowane w WindowCons tants): Nie rób niczego; wymagają, aby program obsługiwał operację w metodzie windowClosing zarejestrowanego obiektu WindowListener.
  • (zdefiniowane w WindowConstants): Automatycznie ukryj ramkę po wywołaniu dowolnego zarejestrowanego obiektu WindowListener.
  • DISPOSE_ON_CLOSE (zdefiniowane w WindowConstants): Automatycznie ukrywaj i usuwaj ramkę po wywołaniu dowolnego zarejestrowanego obiektu WindowListener.
  • EXIT_ON_CLOSE (zdefiniowane w JFrame): Wyjdź z aplikacji, używając metody wyjścia systemu. Używaj tego tylko w aplikacjach.

To była moja odpowiedź, zanim pytanie zostało wyjaśnione, nadal może być przydatne:

Można użyć setVisible(false) na JFrame jeśli chcesz ponownie wyświetlić tę samą ramkę.
W przeciwnym razie zadzwoń pod numer dispose() do remove all of the native screen resources.

+0

dziękuję, ale zamykam okno za pomocą przycisku zamykania w prawym górnym rogu. Nie używa definiującego setVisible (false) i musi zatrzymać wątek. – Keating

+0

Myślę, że muszę przesłonić niektóre przeniesione, nie wiem, który został przeniesiony, ale wierzę, że to nie koniec. – Keating

+0

Nie jestem pewien, co próbujesz osiągnąć, czy możesz edytować pytanie i dodawać informacje o tym, co próbujesz zrobić, a co nie działa? –

3

Czy to pomaga?

import java.awt.BorderLayout; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class TwoJFrames { 
    public static void main(String[] args) { 
     int nb = 4; 
     if (args != null && args.length > 0) { 
      nb = Integer.parseInt(args[0]); 
     } 

     final int frameCount = nb; 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       for (int i = 0; i < frameCount; i++) { 
        JFrame frame = new JFrame("Frame number " + i); 
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
        JPanel p = new JPanel(new BorderLayout()); 
        p.add(new JLabel("Click on the corner to close..."), BorderLayout.CENTER); 
        frame.setContentPane(p); 
        frame.setSize(200, 200); 
        frame.setLocation(100 + 20 * i, 100 + 20 * i); 
        frame.setVisible(true); 
       } 
      } 
     }); 

    } 
} 
+1

to jest przydatne, dziękuję! – Keating

Powiązane problemy