transcurrido tiempo terminar programa optimizar metodo ejemplo ejecucion detener como codigo calcular algoritmo java

tiempo - Recibe una notificación sobre la terminación de un proceso Java



optimizar codigo java netbeans (4)

Programa para eliminar el archivo temp bat.bat cuando se sale del programa:

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();} } }

Hay una aplicación Java de consola que se supone que se ejecutará hasta que se detenga con 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?


Podría usar un gancho de cierre .

Básicamente, necesita crear un hilo que realizará sus acciones de apagado y luego agregarlo como un gancho de apagado . 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 garantía de que el código se ejecute 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 todo el almacenamiento de 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 método Thread s run() se ejecutará cuando el objeto de tiempo de ejecución finalice ...

class ShutdownHookclass extends Thread { public void run() { // perform shutdown actions } } //could be written anywhere in your code Runtime.getRuntime().addShutdownHook(new ShutdownHookclass())