Finalizar un programa Java

22/Sep/2015 Java 3 Comentarios
Programación en Java

¿Qué pasa si mi programa Java finaliza de forma inesperada? o ¿Cómo puedo realizar una serie de operaciones al finalizar un programa Java? Es my normal que nos hagamos estas preguntas si nos preocupa que el programa Java se cierre y nos deje las conexiones a la base de datos abiertas o puertos de sockets colgados.

Para poder solucionar esta situación podemos realizar una serie de operaciones y así finalizar un programa Java de forma correcta.

La idea es añadir un hook en el cual codificaremos las sentencias que queramos que se ejecuten al finalizar el programa.

Es importante saber que esto solo controla si se ha ejecutado la última línea de un programa o ante un System.exit() o en un cierre controlado de la JVM. No funcionará si el sistema operativo mata el proceso.

Para poder añadir el hook utilizamos el método .addShutdownHook(). Dicho método recibirá un objeto Thread. Este será el hilo que se ejecute al finalizar el programa.

Runtime.getRuntime().addShutdownHook(new Thread() {...} );

Vemos que el método .addShutdownHook() se ejecuta sobre el entorno en el que estemos ejecutando nuestro programa Java. Es por ello que utilizamos el objeto Runtime.

Lo siguiente será codificado el hilo Thread, eso nos llevará a codificar su método .run() que será el que tenga el contenido de ejecución del hilo.

Runtime.getRuntime().addShutdownHook(new Thread() {
  @Override
  public void run() {
    System.out.println("Esto lo ejecutamos cuando acabe el programa");
  }
} );

Ya solo nos queda añadir este hook dentro de un método de nuestro programa principal.

public void attachShutDownHook(){
  Runtime.getRuntime().addShutdownHook(new Thread() {
    @Override
    public void run() {
      System.out.println("Esto lo ejecutamos cuando acabe el programa");
    }
  } );

  System.out.println("Creado el hook en el programa");
		
}

E invocar al método desde el programa. Para añadir el hook y que este se ejecute a finalizar un programa Java.

public static void main(String[] args) {
  CierreAplicacion app = new CierreAplicacion();
  app.attachShutDownHook();
  System.out.println("Última instrucción del programa");
  System.exit(0);
}

Vídeos sobre Java


3 comentarios en “Finalizar un programa Java”

Víctor Cuervo

jorge

hola, se que paso bastante tiempo, pero necesito saber como puedo controlar lo que pase cuando el sistema operativo mata mi proceso, y no he terminado de cargar un registro, por ejemplo. En el caso de mi programa, quisiera que antes que el S.O. mate mi proceso, pueda cancelar lo que estaba cargando. saludos. Gracias

Víctor Cuervo

Enzo Dahdah

Buenas!
Una pregunta, en este momento me estoy introduciendo al mundo de Java y la programación y estoy como jugueteando con todo, empece haciendo una especie de programa en el que realizo operaciones usando el Scanner y dándole al usuario la potestad de decidir los términos y el tipo de operación a realizar, mi objetivo es hacer que al colocar otra opción no especificada (es decir: 1. Suma, 2. Resta, 3. Multiplicación, 4. División; o sea que coloque otro número además de esos ya sea 5 o el que sea) el programa termine y haga una especie de shut down. La verdad es que creo que el lenguaje de programador evidentemente no lo domino y por eso no entiendo este post.
Si sería tan amable de explicarme vía mail estaría muy agradecido.
¡Gracias!

Víctor Cuervo

Víctor Cuervo

Buenas, no hace falta hacer nada. Si tienes una estructura de tipo switch para poder analizar las opciones, lo único tendrías que hacer es en la del número 0 (o 5) es hacer un break que te salga hasta el final del programa y este habrá terminado por el solo.

Saludos.

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.