2010-02-04 43 views
5

Sé usar System.exit (0) puede terminar un programa java, por ejemplo, si tengo una ventana JFrame, se cerrará y finalizará el programa, pero me pregunto cuántas otras maneras, se puede cerrar y el programa ser terminado? Incluyendo cuando ocurre un error, ¿se cerrará el programa y se cerrará el JFrame?¿De cuántas maneras puede finalizar un programa de Java?

Respuesta

1

Otra forma en que el programa Java termina es cuando se ejecuta la última instrucción en el código java. También cuando se produce el error java.lang.OutOfMemory, el programa finaliza de forma anómala. Esto ocurre cuando la Máquina Virtual Java no puede asignar un objeto porque está sin memoria, y el recolector de basura no puede poner más memoria disponible.

+0

Solo si main() es nulo. – bkritzer

+0

¿Qué significa esto? ¿Qué ocurre si se ejecuta la última línea de código ejecutada por un hilo determinado (por ejemplo, dentro de Runnable) pero hay otros hilos no daemon vivos? – Adamski

+0

si, solo si main() es nulo. – Thunderhashy

0

He respondido su pregunta en el contexto de las GUI de Swing por haber mencionado JFrame.

  • Con una GUI Swing, el hilo Despacho de evento registrará todas las excepciones que se produzcan pero no finalizará la aplicación en esta situación.
  • Del mismo modo, si otro subproceso lanza una excepción y finaliza el subproceso Despacho de evento se asegurará de que la aplicación se mantenga activa (ya que no es un subproceso de daemon).
  • Un punto final: Si desea que su aplicación a darse por terminada cuando un JFrame está cerrado, es necesario llamar a: setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

lo contrario, el marco simplemente se ocultará cuando se cierra, pero la aplicación seguirá correr.

2

Aquí es todo lo que puedo pensar en la parte superior de mi cabeza:

  1. principales() devuelve (ya sea un valor o un vacío() principales termina de ejecutar su última declaración)

  2. programa produce una excepción no capturada

  3. System.exit (int)

  4. se puede accidente?

En el caso de un cierre JFrame, creo que no habría un controlador onClose() que, o bien llama System.exit (0) o hace que el método principal para volver.

+2

En referencia a 1 .: si hay subprocesos no deaemon en ejecución, el programa continuará ejecutándose incluso después de que main() haya retornado. – jeremytrimble

+0

JFrames tiene un método llamado 'setDefaultCloseOperation' que toma una de estas constantes como argumento:' WindowConstants.HIDE_ON_CLOSE' (valor predeterminado), 'WindowConstants.DO_NOTHING_ON_CLOSE',' WindowConstants.DISPOSE_ON_CLOSE', y 'JFrame.EXIT_ON_CLOSE' – Powerlord

+0

Tenga a mano una mirada a esta respuesta con respecto al final de main(): http://stackoverflow.com/questions/2070951/main-function-does-not-return-anything-why/2070968#2070968 –

3

Un programa Java finaliza cuando finaliza el último indicador de Subproceso sin daemon, o cuando se llama a un método que apaga la máquina virtual (System.exit(), Runtime.exit(), Runtime.halt() y posiblemente un un poco mas).

Cualquier otra cosa depende de las bibliotecas que llaman a System.exit() (como JFrame con EXIT_ON_CLOSE).

+1

Nit-picking, pero ¿y si has registrado un gancho de apagado que entra en un ciclo infinito cuando se ejecuta? – Adamski

-1

También puede usar Application.exit().

+0

Bastante seguro, 'Aplicación' es una clase de framework y no parte del JRE. ¿Podría proporcionar el nombre de clase calificado completo? –

4

Para agregar a otras respuestas:

  • Si el proceso que aloja la VM se finalizaron de manera forzada, el programa va a desaparecer espontáneamente
  • Lo mismo sucede si el enchufe se tiró de la máquina que aloja la VM :)
+1

ROFL. +1 para ese – DVK

+1

No estoy del todo bromeando :) Este es en realidad un escenario importante para un servidor que necesita fallar sin perder datos. –

+1

+1 ese es uno de los escenarios más desagradables. Si no fuera por eso, la mayoría del software de alta disponibilidad podría ser ** mucho ** más rápido. –

0

Puede finalizar un programa Java en ejecución externamente. Eliminando el proceso java.exe del administrador de tareas (en el caso de Windows)

Cuestiones relacionadas