2009-12-22 13 views

risposta

73

Se fate non desidera che l'applicazione per terminare quando un JFrame è chiuso, utilizzare

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) 

invece di

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Dal documentation:

  • DO_NOTHING_ON_CLOSE (definito in WindowCons Tanti): non fare nulla; richiedere al programma di gestire l'operazione nel metodo windowClosing di un oggetto WindowListener registrato.
  • HIDE_ON_CLOSE (definito in WindowConstants): nasconde automaticamente il frame dopo aver richiamato gli oggetti WindowListener registrati.
  • DISPOSE_ON_CLOSE (definito in WindowConstants): nasconde e disponga automaticamente il frame dopo aver richiamato gli oggetti WindowListener registrati.
  • EXIT_ON_CLOSE (definito in JFrame): consente di uscire dall'applicazione utilizzando il metodo di uscita Sistema. Usalo solo nelle applicazioni.

Questa è stata la mia risposta prima che la domanda è stata chiarita, potrebbe essere ancora utile:

È possibile utilizzare setVisible(false) sul JFrame se si desidera visualizzare di nuovo lo stesso telaio.
Altrimenti chiamare dispose() a remove all of the native screen resources.

+0

grazie, ma chiudo la finestra con il pulsante di chiusura nell'angolo in alto a destra. Non usa setVisible (false) definitivamente e deve interrompere il thread. – Keating

+0

Penso di dover scavalcare un po 'di latte, non so quale faccia di latte, ma credo che non sia la pelle chiusa. – Keating

+0

Non sono sicuro di cosa cerchi di ottenere, potresti modificare la tua domanda e aggiungere alcune informazioni su ciò che cerchi di fare e su cosa non funziona? –

3

Ti aiuta?

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

questo è utile, grazie! – Keating

Problemi correlati