Hay una aplicación Java de consola que se supone que se ejecutará hasta que se detenga mediante Ctrl + C o cierre la ventana de la consola. ¿Cómo se puede programar esa aplicación para ejecutar un código de limpieza antes de salir?Recibir notificación sobre una terminación de proceso Java
Respuesta
Puede usar Shutdown Hook.
Básicamente necesita crear un hilo que realizará sus acciones de apagado, y luego add it as a shutdown hook. Por ejemplo:
class ShutdownHook extends Thread
{
public void run()
{
// perform shutdown actions
}
}
// Then, somewhere in your code
Runtime.getRuntime().addShutdownHook(new ShutdownHook())
Un gancho de cierre es el camino a seguir, pero tenga en cuenta que no hay ninguna garantía de que el código se ejecuta realmente. Los bloqueos de JVM, los fallos de alimentación o un simple "kill -9" en su JVM pueden evitar que el código se limpie. Por lo tanto, debe asegurarse de que su programa se mantenga en un estado constante, incluso si se ha cancelado abruptamente.
Personalmente, simplemente uso una base de datos para almacenar todo el estado. Su modelo de transacciones se asegura de que el almacenamiento persistente esté en buen estado sin importar lo que ocurra. Pasaron años haciendo que el código sea infalible, entonces ¿por qué debería perder el tiempo con los problemas ya resueltos?
El código escrito dentro de un Thread
s run()
método se ejecutará cuando el objeto en tiempo de ejecución termina ...
class ShutdownHookclass extends Thread {
public void run() {
// perform shutdown actions
}
}
//could be written anywhere in your code
Runtime.getRuntime().addShutdownHook(new ShutdownHookclass())
Programa para borrar bat.bat archivo temporal cuando el programa se sale:
public class Backup {
public static void createBackup(String s)
{
try{
String fileName ="C:\\bat"+ ".bat";
FileWriter writer=new FileWriter(fileName);
String batquery="cd C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin"
+ "\nmysqldump -uroot -proot bankdb > \""+s+".sql\""
+"\nexit";
writer.append(batquery);
writer.close();
}
catch(Exception e){e.getMessage();}
try{
Process p =Runtime.getRuntime().exec("cmd /c start C:\\bat.bat");
}
catch(Exception e){e.getMessage();}
ShutDownHook sdh=new ShutDownHook();
Runtime.getRuntime().addShutdownHook(sdh);
}
}
class ShutDownHook extends Thread
{
public void run()
{
try
{
File f=new File("c:/bat.bat");
f.delete();
}
catch(Exception e){e.getMessage();}
}
}
- 1. Cómo recibir una notificación cuando se notifica una notificación
- 2. ¿Cómo publicar y recibir una notificación?
- 3. ¿Cómo recibir una notificación de luz LED?
- 4. notificación de terminación de objeto C++
- 5. Recibir notificación de eliminación/destrucción de objetos
- 6. Terminación de un proceso antivirus protegido
- 7. Recibir una notificación cuando se selecciona la pestaña actual nuevamente
- 8. ¿Puedo recibir una notificación cuando comience un nuevo día?
- 9. ¿Dónde y cómo registro un objeto para recibir una Notificación?
- 10. Cómo recibir una notificación cuando NSWindow se cierra
- 11. ¿Cómo implemento la terminación elegante en Java?
- 12. Recibir notificación cuando se cambió el valor de RegistryKey
- 13. java hilo de terminación temprana y sospechosamente
- 14. ¿Cómo recibir una notificación cuando el estado de SMS cambia de 'En cola' a 'Enviado'?
- 15. Obtenga una notificación sobre un cambio de página en UIWebView
- 16. Mostrar una WinForm sobre el área de notificación
- 17. JCheckbox change listener recibe una notificación de mouse sobre eventos
- 18. Cómo puedo recibir una notificación si una columna DataGrid está ordenada (y no ordenada)
- 19. ¿Cómo puedo recibir una notificación cuando se completa una tarea dispatch_async?
- 20. ¿Cómo puedo recibir una notificación cuando se crea una nueva ventana en Win32?
- 21. Objetivo C: recibir una notificación cuando se llame a un método
- 22. Notificación de falta de memoria en Java
- 23. ¿Cómo recibir una notificación cuando un usuario cambia la contraseña o solicita un restablecimiento de contraseña?
- 24. ¿Se puede recibir una notificación cuando un UITableView termine de desplazarse?
- 25. ¿Hay alguna manera de recibir una notificación cuando cambie mi propiedad UIImageView.image?
- 26. Recibir una notificación cuando una nueva unidad está conectada a través de USB u otros medios (C#)
- 27. Notificación sobre los cambios del objeto blob azul
- 28. Java: recibir una respuesta HTTP de varias partes
- 29. Cómo cancelar la notificación en la terminación de aplicación inesperada/forzada
- 30. Los diferentes tipos de propuestas de terminación de Java Eclipse
+ 1 - ¿Quizás podría elaborar con un ejemplo instructivo? ... – johnstok
Ejemplo agregado. Gracias. –