2008-09-15 17 views

Respuesta

32

Puede agregar un gancho de cierre a su aplicación de la siguiente manera:

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 
    public void run() { 
     // what you want to do 
    } 
})); 

Esto es básicamente equivalente a tener un try {} finally {} bloque de alrededor de todo el programa, y ​​básicamente abarca lo que hay en el finalmente bloquear.

Tenga en cuenta el caveats though!

+1

¿Dónde debería estar el gancho de cierre se encuentra? Tengo un programa y necesito guardar algunos datos también. Estoy usando el modelo MVC pero no sé dónde colocar este anzuelo. Gracias – frank17

+1

en cualquier lugar al que se llame el código. Lo he usado en mi método principal y en mi bloque estático y funcionó de manera equivalente. – EngineerWithJava54321

+0

Mi código ejecuta System.exit (exit_code) en varias ubicaciones, ¿cómo lo aplico para que el shutdownhook se ejecute sin importar el código de salida? (Actualmente coloco el código en el constructor y solo se ejecuta cuando los programas salen en el método principal) – kbluue

10

Agregar un gancho de cierre addShutdownHook(java.lang.Thread) es probablemente lo que buscas. Hay problemas con este enfoque, sin embargo:

  • se perderán los cambios si el programa se interrumpe de forma incontrolada (es decir, si se mata)
  • se perderán los cambios si hay errores (Permiso denegado , disco lleno, errores de red)

Así que podría ser mejor guardar la configuración inmediatamente (posiblemente en un hilo adicional, para evitar tiempos de espera).

0

¿Está creando una aplicación GUI independiente (es decir, Swing)?

En caso afirmativo, debe considerar cómo está proporcionando opciones a sus usuarios sobre cómo salir de la aplicación. A saber, si va a haber un menú de Archivo, esperaría que haya una opción de menú "Salir". Además, si el usuario cierra la última ventana en la aplicación, también esperaría que salga de la aplicación. En ambos casos, debe llamar al código que gestiona el guardado de las preferencias del usuario. .

0

Usando Runtime.getRuntime() addShutdownHook() es sin duda una manera de hacer esto - pero si usted está escribiendo aplicaciones Swing, recomiendo encarecidamente que se tome un vistazo a JSR 296 (Swing Application Framework)

Aquí hay un buen artículo sobre los conceptos básicos: http://java.sun.com/developer/technicalArticles/javase/swingappfr/.

La implementación de referencia de JSR proporciona el tipo de características que está buscando en un nivel de abstracción más alto que la adición de ganchos de apagado.

Aquí es la implementación de referencia:

Cuestiones relacionadas