Cuando quieres terminar la ejecución de un programa, ¿qué sueles hacer? Pues normalmente pinchar en el icono de cierre de la ventana de la aplicación.
En Swing, una cosa es cerrar una ventana, y otra es que esa ventana deje de existir completamente, o cerrar la aplicación completamente.
- Se puede hacer que una ventana no esté visible, y sin embargo que ésta siga existiendo y ocupando memoria para todos sus componentes, usando el método
setVisible(false)
. En este caso bastaría ejecutar para elJFrame
el métodosetVisible(true)
para volver a ver la ventana con todos sus elementos. - Si queremos cerrar la aplicación, es decir, que no sólo se destruya la ventana en la que se mostraba, sino que se destruyan y liberen todos los recursos (memoria y CPU) que esa aplicación tenía reservados, tenemos que invocar al método
System.exit(0)
. - También se puede invocar para la ventana
JFrame
al métododispose()
, heredado de la claseWindow
, que no requiere ningún argumento, y que borra todos los recursos de pantalla usados por esta ventana y por sus componentes, así como cualquier otra ventana que se haya abierto como hija de esta (dependiente de esta). Cualquier memoria que ocupara esta ventana y sus componentes se libera y se devuelve al sistema operativo, y tanto la ventana como sus componentes se marcan como "no representables". Y sin embargo, el objeto ventana sigue existiendo, y podría ser reconstruido invocando al métodopack()
o la métodoshow()
, aunque deberían construir de nuevo toda la ventana.
Las ventanas JFrame
de Swing permiten establecer una operación de cierre por defecto con el método setDefaultCloseOperation()
, definido en la clase JFrame
.
¿Cómo se le indica al método el modo de cerrar la ventana?
Los valores que se le pueden pasar como parámetros a este método son una serie de constantes de clase:
DO_NOTHING_ON_CLOSE
: no hace nada, necesita que el programa maneje la operación en el métodowindowClosing()
de un objetoWindowListener
registrado para la ventana.HIDE_ON_CLOSE
: Oculta de ser mostrado en la pantalla pero no destruye el marco o ventana después de invocar cualquier objetoWindowListener
registrado.DISPOSE_ON_CLOSE
: Oculta y termina (destruye) automáticamente el marco o ventana después de invocar cualquier objetoWindowListener
registrado.EXIT_ON_CLOSE:
Sale de la aplicación usando el métodoSystem.exit(0)
. Al estar definida enJFrame
, se puede usar con aplicaciones, pero no con applets.