2012-05-06 19 views
14

Me preguntaba si hay una forma, haciendo clic en la "X", para permitir que el programa ejecute algún código antes de cerrar el JFrame. El método setDefaultCloseOperation() solo toma un número entero.JFrame On Close Operation

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Respuesta

11

Puede que le interese usar WindowListener. El WindowListener tutorial.

+0

Muchas gracias. Eso es lo que yo busco. –

+2

O puede usar [WindowAdapter] (http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/WindowAdapter.html) para facilitar la creación de objetos de escucha. –

15

@Jeffrey tiene una buena respuesta, pero debes considerar lo que estás tratando de hacer. Si realmente desea hacer algo al cerrar un marco, entonces WindowListener es el camino a seguir. Sin embargo, si estás buscando un lugar para hacer algunas tareas de limpieza y apagado ordenado, entonces probablemente quieras un shutdown hook. Usando un WindowListener, el código solo se activará, como usted dijo, por el usuario "haciendo clic en la X". Pero, ¿qué pasa si el usuario inicia la aplicación en el primer plano de un terminal y lo mata con Ctrl + C? ¿Qué pasa si el usuario mata el proceso desde la línea de comando o desde un administrador de tareas?

+2

editado para señalar el último javadoc :-) +1 por cierto – COD3BOY

+0

Wow, gracias por su respuesta. Estoy usando esto para guardar algunos datos al cerrar el marco. –

+0

@Sanjay: Elegí vincular jdk6 porque 1) en mi experiencia, aún hay más personas que usan 6 que 7, y 2) Runtime.addShutdownHook() no cambió una sola coma entre 6 y 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 
       } 
      });