Pregunta

Por diversas razones de llamadas System.exit está mal visto cuando la escritura Las Aplicaciones Java, así que, ¿cómo puedo notificar el proceso de llamada, que no todo va de acuerdo al plan?

Editar: El 1 es un standin para cualquier no-cero código de salida.

¿Fue útil?

Solución

El uso de System.exit está mal visto cuando la 'aplicación' es en realidad una sub-aplicación (por ejemplo,servlet, applets) de una mayor aplicación de Java (servidor):en este caso el System.exit se podría detener la JVM y, por tanto, también a todos los otros sub-aplicaciones.En esta situación, lanzando una excepción adecuada, lo que podría ser capturados y manipulados por el marco de la aplicación/servidor es la mejor opción.

Si la aplicación java está diseñado para ejecutarse como una aplicación independiente, no hay nada malo con el uso de System.exit.en este caso, la configuración de un valor de salida es probablemente el más fácil (y también los más utilizados) la forma de comunicar el éxito o el fracaso del proceso padre.

Otros consejos

Estoy de acuerdo con el "lanzar una Excepción"la multitud.Una razón es que el Sistema de llamadas.de salida, el código es difícil de usar si usted desea otro código para poder utilizarlo.Por ejemplo, si usted descubre que su clase sería útil de una aplicación web, o algún tipo de mensaje de consumo de la aplicación, sería bueno para permitir que los contenedores de la oportunidad de tratar con el fracaso de alguna manera.Un contenedor desea, puede volver a intentar la operación, decide registro y de ignorar el problema, envíe un correo electrónico a un administrador, etc.

Una excepción a esto sería su main() método;esto podría atrapar la Excepción, y la llamada System.exit() con algún valor que pueda ser reconocido por el llamado proceso o secuencia de comandos de shell.

System.exit() se bloque, y crear un interbloqueo si el hilo que inició se utiliza en un cierre de gancho.

Puede ser peligroso / problemática en la web servlet entornos también.

Lanzar una Excepción se considera generalmente que es la otra alternativa.

Nuestra política de empresa es que está bien (incluso de preferencia) para el Sistema de llamada.exit(-1), pero sólo en init() métodos.Definitivamente, me gustaría pensar dos veces antes de llamar durante un programa normal de flujo.

Lanzar excepciones es la mejor manera de enviar información acerca de un cierto error de la aplicación.

Un número no dicen tanto como:

Exception at thread 'main': FileNotFoundException "The file 'foo' doesn't exist"

(o algo parecido a eso)

Es mal visto por normal salidas.Si "no todo va según lo previsto", entonces el Sistema.la salida está muy bien.

Actualización:Debo agregar que puedo asumir que sus '1', tiene un significado que está documentado en algún lugar.

Creo que lanzar una excepción es lo que debe hacer cuando algo va mal.De esta manera, si la aplicación no se ejecuta como una aplicación independiente de la persona que llama puede reaccionar a ella y tiene alguna información acerca de lo que salió mal.También es más fácil para los propósitos de depuración porque así tener una mejor idea acerca de lo que salió mal al ver una traza de la pila.

Una cosa importante a tener en cuenta es que cuando la excepción alcanza el nivel superior y por lo tanto hace que la VM para salir de la VM devuelve un código de retorno de 1, por lo tanto, fuera de las aplicaciones que utilizan el código de retorno de ver que algo salió mal.

El único caso donde se creo el Sistema.exit() tiene sentido es cuando su aplicación está destinada a ser llamado por aplicaciones que no son de Java y por lo tanto tiene que utilizar los códigos de retorno para ver si su aplicación funcionaba o no y desea que las aplicaciones tengan la posibilidad de reaccionar de manera diferente en diferentes cosas van mal, es decir,necesita diferentes códigos de retorno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top