2012-05-06 12 views
14

Mi chiedevo se c'è un modo, facendo clic sulla "X", per consentire al programma di eseguire del codice prima di chiudere JFrame. Il metodo setDefaultCloseOperation() accetta solo un numero intero.JFrame On Close Operation

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

risposta

11

Potresti essere interessato all'utilizzo di WindowListener. Il WindowListener tutorial.

+0

Grazie mille. Questo è quello che ho dopo. –

+2

Oppure puoi usare [WindowAdapter] (http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/WindowAdapter.html) per la comodità di creare oggetti listener. –

15

@Jeffrey ha una buona risposta, ma dovresti considerare quello che stai cercando di fare. Se vuoi veramente fare qualcosa alla chiusura di un frame, allora un WindowListener è la strada da percorrere. Tuttavia, se stai cercando un posto dove fare un po 'di pulizia e un blocco regolare, allora probabilmente preferisci il shutdown hook. Usando un WindowListener, il codice verrà attivato, come hai detto, dall'utente "facendo clic sulla X". Ma cosa succede se l'utente avvia l'app in primo piano di un terminale e lo uccide con Ctrl + C? Cosa succede se l'utente uccide il processo dalla riga di comando o da un task manager?

+2

modificato per indicare l'ultima javadoc :-) +1 btw – COD3BOY

+0

Wow, grazie per la risposta. Sto usando questo per salvare alcuni dati alla chiusura della cornice. –

+0

@Sanjay: ho scelto di collegare jdk6 perché 1) nella mia esperienza, più persone usano ancora 6 di 7 e 2) Runtime.addShutdownHook() non ha modificato una leccata tra 6 e 7. –

14
this.addWindowListener(new WindowAdapter(){ 
       public void windowClosing(WindowEvent e){ 
        int i=JOptionPane.showConfirmDialog(null, "Seguro que quiere salir?"); 
        if(i==0) 
         System.exit(0);//cierra aplicacion 
       } 
      });