Necesito ejecutar un método (un método que crea un archivo), cuando salgo de mi programa, ¿cómo voy a hacer esto?¿Se está ejecutando un método al cerrar el programa?
Respuesta
Add shutdown hook. Vea esto javadoc.
Ejemplo:
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
System.out.println("In shutdown hook");
}
}, "Shutdown-thread"));
}
No estoy muy seguro de cómo puedo implementar esto en mi código. ¿Puedo tener alguna ayuda? – Stan
@Stan He actualizado la respuesta. –
si mira otras preguntas de Stans, no creo que esto sea lo que él necesita. –
dado que está utilizando Swing. Cuando cierra su aplicación (presionando el botón Cerrar), puede simplemente ocultar su marco. Ejecute el método que desea, que crea el archivo y luego salga del Marco. Esto daría como resultado una salida elegante. En caso de errores/excepciones, puede registrar eso en un archivo separado.
Este es el código
package test;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JFrame;
public class TestFrame extends JFrame{
public TestFrame thisFrame;
public TestFrame(){
this.setSize(400, 400);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
public static void main(String[] args){
TestFrame test = new TestFrame();
test.addComponentListener(new ComponentAdapter() {
@Override
public void componentHidden(ComponentEvent e) {
System.out.println("Replace sysout with your method call");
((JFrame)(e.getComponent())).dispose();
}
});
}
}
Por favor, tenga en cuenta el uso de ganchos de cierre. Como se da en la Javadoc, afirma que
Cuando la máquina virtual se termina debido a usuario cierre de sesión o el apagado del sistema el sistema operativo subyacente puede sólo permiten una cantidad fija de tiempo en que apagar y salida. Es, por tanto, aconsejable intentar ninguna interacción del usuario o para realizar un cálculo de larga duración en un cierre de gancho
Entonces, puse mi marco.setDefaultCloseOperation (JFrame.HIDE_ON_CLOSE); , pero, ¿cómo iba a ejecutar realmente el método que quiero ahora? – Stan
@Stan: Hola stan, he actualizado con el código. si tiene alguna duda, pregunte – bragboy
y ejecute el método que desee dentro del método componentHidden(). – bragboy
También puede añadir una ventana en una estrecha oyente a su aplicación.
Implemente un WindowListener (o extienda el WindowAdapter), use el windowClosing (si los errores en el proceso deben evitar que se cierre la ventana o algo así) o el método windowClosed.
Aquí está el enlace para el Sol oficial (ERM ... Oracle) tutorial que le indica cómo crear un WindowListener y añadir que a su JFrame: http://download.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
class ExitThread extends Thread {
public void run() {
// code to perform on exit goes here
}
}
//in main or wherever, beginning of execution
ExitThread t = new ExitThread();
//don't call t.start(), the hook will do it on exit
addShutdownHook(t);
no lo he probado, pero eso Debería ponerte en marcha. Además, no tiene que usar el constructor predeterminado si quiere pasar algunos parámetros a ese hilo.
addWindowListener es mejor solución:
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
// run methods before closing
try {
Runtime.getRuntime().exec("taskkill /f /im java.exe");
} catch (IOException e4) {
// TODO Auto-generated catch block
e4.printStackTrace();
}
}
});
- 1. Finalmente el bloque no se está ejecutando?
- 2. Obtenga el nombre del método que se está ejecutando actualmente
- 3. Determinar si el programa se está ejecutando en Windows Server
- 4. Obtener el nombre del método actual que se está ejecutando
- 5. iPhone SDK- Error del depurador: El programa que se está depurando no se está ejecutando
- 6. apropiante un hilo que se está ejecutando sincronizado método
- 7. ¿Cómo puede saber mi programa si Delphi se está ejecutando?
- 8. Cómo reemplazar un JPanel con otro mientras el programa se está ejecutando
- 9. Cómo cerrar un jframe sin cerrar el programa principal
- 10. compruebe si el programa se está ejecutando y ejecútelo si no está en perl
- 11. Determine si un programa se está ejecutando en un escritorio remoto
- 12. ¿Cómo puedo verificar si un programa se está ejecutando por primera vez?
- 13. Comprobar si el proceso se está ejecutando
- 14. ¿Se está ejecutando un subproceso en iOS?
- 15. Periodictask no se está ejecutando
- 16. applicationDidFinishLaunching no se está ejecutando
- 17. ¿Qué iniciador se está ejecutando?
- 18. ¿Cómo verificar si un proceso se está ejecutando con Delphi?
- 19. ¿Cómo puedo detectar si un programa se está ejecutando desde dentro de valgrind?
- 20. ¿Cómo puede mi programa detectar si se está ejecutando en un dominio en particular?
- 21. Buscar ruta al archivo que se está ejecutando actualmente
- 22. Ejecutando un programa/script de QMake
- 23. llamando a un método al cerrar la consola
- 24. ¿Cómo cerrar un socket dejado abierto por un programa destruido?
- 25. Usar el botón Salir para cerrar un programa winform
- 26. Ejecutando un mini-programa en Mono.Csharp
- 27. Detectar si el programa se está ejecutando con todos los derechos de administrador
- 28. notificar View (Modelos) de cerrar el programa
- 29. ¿Cómo puedo forzar que todos los subprocesos de programa salgan al cerrar el programa?
- 30. Cambiar el fondo de pantalla con un archivo por lotes, al cerrar el programa. ¿Posible?
Qué tipo de programa que está desarrollando, una línea de comandos, escritorio, aplicación web, ¿qué? ¿Cómo lo comienzas y cómo lo cierras? –
Lo inicio presionando el botón Ejecutar en Eclipse en este momento, se ejecutará con un archivo .jar cuando lo haya hecho, lo cierra simplemente haciendo clic en el botón normal de cerrar ventanas. Es un juego muy básico en este momento. – Stan
Entonces, ¿es una aplicación Swing, o tal vez una aplicación SWT? –