Saltar la navegación

3.3.2.- Cerrar la aplicación.

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 el JFrame el método setVisible(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étodo dispose(), heredado de la clase Window, 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étodo pack() o la método show(), 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étodo windowClosing() de un objeto WindowListener 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 objeto WindowListener registrado.
  • DISPOSE_ON_CLOSE: Oculta y termina (destruye) automáticamente el marco o ventana después de invocar cualquier objeto WindowListener registrado.
  • EXIT_ON_CLOSE: Sale de la aplicación usando el método System.exit(0). Al estar definida en JFrame, se puede usar con aplicaciones, pero no con applets.

Autoevaluación

Pregunta 1

System.exit(0) oculta la ventana pero no libera los recursos de CPU y memoria que la aplicación tiene reservados.