2010-04-19 11 views
122

¿Cuál es la mejor manera de cerrar una aplicación Java con código?Cómo cerrar una aplicación java desde el programa

+1

Hmm. Creo que la pregunta puede ser demasiado general. ¿Salir bajo qué circunstancias? –

+3

Deje que todos sus hilos no daemon terminen normalmente? –

+2

Solo para salir generalmente – Olaseni

Respuesta

165

Puede usar System.exit() para este fin.

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

public static void exit(int status)

pone término a los actualmente en ejecución Java Virtual Machine. El argumento sirve como un código de estado; por convención, un código de estado distinto de indica una terminación anormal.

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

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

Runtime.getRuntime().exit(n)

87
System.exit(0); 

El "0" permite a quien llama su programa de saber que todo ha ido bien. Sin embargo, si abandona debido a un error, debe System.exit(1);, o con otro número distinto de cero correspondiente al error específico.

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

+0

pensé que era System.exit (1)? – AFK

+13

Como afirma 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

3

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

asegúrese de que:

  • utiliza el valor de salida adecuada. 0 es la salida normal, cualquier otra cosa indica que hubo un error
  • cierra todas las secuencias de entrada y salida. Archivos, conexiones de red, etc.
  • iniciar sesión o imprimir una razón para salir, especialmente si su causa de un error
5

System.exit() no suele ser la mejor manera, pero depende de su aplicación.

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

10

System.exit(int i) se va a utilizar, pero me gustaría incluirlo dentro de un shutdown() método más genérico, en el que incluiría pasos "limpieza", así, el cierre de conexiones de socket, descriptores de archivos, a continuación, que salen con System.exit(x).

1

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

3

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

Encontré que usar System.exit(x) restablece el panel de interacciones y suponiendo que necesita algo de la información, todo desaparece.

0
Runtime.getCurrentRumtime().halt(0); 
+1

Mejor: Runtime.getRuntime(). Detener (0); ¡Funcionó perfectamente para mí dentro de Scala! –

+0

@GerhardHagerer, pero ¿y si obtienes el runti no actual, yo? –

+0

Desde el Javadoc para 'alto ':" Este método debe usarse con extrema precaución. A diferencia del método' exit ', este método no provoca que se inicien los ganchos de cierre y no ejecuta los finalizadores no invocados si finalization-on-exit ha sido habilitado. Si la secuencia de apagado ya se ha iniciado, este método no espera a que ningún enganche o finalizador en ejecución finalicen su trabajo ". En resumen, no debería necesitar usar 'detener', debería preferir' exit'. –

-1

System.exit (ABORT); Salga del proceso de inmediato.

+0

No existe una variable como ABORT. –

2

Hay dos respuestas simples a la pregunta.

Esta es la "manera 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; 
+0

'System.exit (0); return; 'también es bueno, el retorno impide que se ejecute ningún código ruther antes de que el sistema pueda salir; de lo contrario, necesitaría un indicador (..' i.e. if (! called_exit) {más código después de exit statement} ' – ycomp

-1

Esto debe 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(); 
    } 
} 
-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 el hilo principal activo. Al hacer eso, puede terminar una tarea, pero también mantener la capacidad de comenzar otra tarea sin reiniciar la aplicación.

Cuestiones relacionadas