Cómo salir de una aplicación Java desde el programa

145

¿Cuál es la mejor manera de salir de una aplicación Java con código?

Olaseni
fuente
1
Hmm Creo que la pregunta puede ser demasiado general. ¿Dejar de fumar bajo qué circunstancias?
Allen George
3
¿Permitir que todos tus hilos no daemon terminen normalmente?
Thorbjørn Ravn Andersen

Respuestas:

192

Puedes usar System.exit()para este propósito.

De acuerdo con la documentación de Java 8 de Oracle:

public static void exit(int status)

Termina la máquina virtual Java actualmente en ejecución. El argumento sirve como un código de estado; por convención, un código de estado distinto de cero indica una terminación anormal .

Este método llama al método de salida en clase Runtime. Este método nunca vuelve normalmente.

La llamada System.exit(n)es efectivamente equivalente a la llamada:

Runtime.getRuntime().exit(n)

Jon
fuente
102
System.exit(0);

El "0" le dice a quien llamó a su programa que todo salió bien. Sin embargo, si está saliendo debido a un error, debería hacerlo System.exit(1);, o con otro número distinto de cero correspondiente al error específico.

Además, como otros han mencionado, ¡limpie primero! Eso implica cerrar archivos y otros recursos abiertos.

Chris Cooper
fuente
Pensé que era System.exit (1)?
AFK
14
Como dice Chris, System.exit(1)(o cualquier otro número) es si desea indicar que se cerró debido a un error. System.exit(0)indica que el programa se cerró normalmente. También puede cambiar 1 a cualquier número que desee, luego, cuando esté ejecutando su aplicación desde un script, puede determinar si hubo un error.
StormPooper
10

System.exit(int i)se utilizará, pero lo incluiría dentro de un shutdown()método más genérico , donde también incluiría pasos de "limpieza", cierre de conexiones de socket, descriptores de archivo, y luego salir con System.exit(x).

Bastien
fuente
6

System.exit() Por lo general, no es la mejor manera, pero depende de su aplicación.

La forma habitual de finalizar una aplicación es salir del main()método. Esto no funciona cuando hay otros subprocesos que no son deamon en ejecución, como es habitual en aplicaciones con una interfaz gráfica de usuario (AWT, Swing, etc.). Para estas aplicaciones, puede encontrar una manera de finalizar el bucle de eventos de la GUI (no sabe si eso es posible con AWT o Swing), o invocar System.exit().

Christian Semrau
fuente
4

Usar dispose();es una forma muy efectiva de cerrar sus programas.

Descubrí que el uso System.exit(x)restablece el panel de interacciones y suponiendo que necesita algo de la información allí, todo desaparece.

Joshua
fuente
3

Estoy de acuerdo con Jon, haga que su aplicación reaccione a algo y llame a System.exit ().

Estar seguro de que:

  • usa el valor de salida apropiado. 0 es salida normal, cualquier otra cosa indica que hubo un error
  • cierra todas las secuencias de entrada y salida. Archivos, conexiones de red, etc.
  • Usted registra o imprime un motivo para salir, especialmente si se debe a un error
Freiheit
fuente
2

La respuesta es System.exit (), pero no es algo bueno, ya que esto anula el programa. Cualquier limpieza, destrucción que pretendes hacer no sucederá.

Vaishak Suresh
fuente
1

Hay dos respuestas simples a la pregunta.

Esta es la "forma profesional":

//This just terminates the program.
System.exit(0);

Esta es una forma más torpe:

//This just terminates the program, just like System.exit(0).
return;
Anton
fuente
System.exit(0); return;también es bueno, el retorno evita que se ejecute cualquier código de ruta antes de que el sistema pueda salir, de lo contrario necesitaría un indicador (..i.e. if (!called_exit) { further code after exit statement }
ycomp
-1
Runtime.getCurrentRumtime().halt(0);
Tio hermano
fuente
1
Mejor: Runtime.getRuntime (). Halt (0); ¡Funcionó perfectamente para mí dentro de Scala!
Gerhard Hagerer
@GerhardHagerer pero ¿y si obtienes el runti no actual, yo?
Dude Bro
1
Del Javadoc para halt: "Este método debe usarse con extrema precaución. A diferencia del exitmétodo, este método no hace que se inicien los ganchos de apagado y no ejecuta finalizadores no invocados si se ha habilitado la finalización al salir. Si la secuencia de apagado se ha activado. ya iniciado, entonces este método no espera a que los ganchos de cierre o finalizadores en ejecución finalicen su trabajo ". En resumen, no debería necesitar usar halt, debería preferir exit.
Erwin Bolwidt
-1

System.exit()Hará lo que quieras. Pero en la mayoría de las situaciones, es probable que desee salir de un hilo y dejar vivo el hilo principal. Al hacerlo, puede finalizar una tarea, pero también mantener la capacidad de iniciar otra tarea sin reiniciar la aplicación.

SmartFingers
fuente
-3

System.exit (ABORT); Salir es el proceso de inmediato.

pooploser0110
fuente
No existe una variable como ABORT.
Alfonso Vergara
-3

Esto debería hacerlo de la manera correcta:

mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
mainFrame.addWindowListener(new WindowListener() {

@Override
public void windowClosing(WindowEvent e) {
    if (doQuestion("Really want to exit?")) {
      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      mainFrame.dispose();
    }
}
usuario3596517
fuente