Sempre que um programa Perl, Python, C ++ ou Tcl for interrompido com uma exceção não tratada, esses tempos de execução de linguagem cuidarão para registrar um código de saída diferente de zero para o processo. Até os programas baseados em Eclipse retornam 1 se falharem durante a inicialização. Os programas executados pelo padrão java.exe
, no entanto, retornam felizmente zero, não importa quão abruptamente eles terminem, a menos que o programa chame System.exit()
com um valor de saída. Mesmo AssertionFailedError
ou UnsatisfiedLinkError
são relatados de volta ao programa de chamada como saídas bem-sucedidas.
Obviamente, nem todos os sistemas possuem códigos de retorno de programa, mas o Unix e o Windows eram importantes o suficiente para garantir java.lang.Process.exitValue()
processos filhos; eles também não garantem convenções de honra para processos-pai?
Isso é uma falha no design da linguagem ou apenas na implementação? Existe um argumento de que é uma boa ideia?
fonte
java
comando no Java 6 e Java 7 parece responder com um código de saída diferente de zero se uma exceção não capturada for gerada.Respostas:
Se o Java Language Specification não definir explicitamente qual valor de saída esperar, ele será indefinido e você não deve confiar nele.
Você precisa pegar Throwable no seu método principal e chamar System.exit (1).
fonte