Каждый раз, когда программа на Perl, Python, C ++ или Tcl останавливается с необработанным исключением, эти языковые среды выполнения заботятся о регистрации ненулевого кода завершения процесса. Даже программы на основе Eclipse возвращают 1, если они терпят неудачу во время запуска. Программы, выполняемые по стандарту java.exe
, однако, с радостью возвращают ноль, независимо от того, как резко они заканчиваются, если только программа не вызывает System.exit()
с выходным значением. Даже AssertionFailedError
или UnsatisfiedLinkError
возвращаются в вызывающую программу как успешные выходы.
Конечно, не во всех системах есть коды возврата программ, но Unix и Windows были достаточно важны, чтобы гарантировать java.lang.Process.exitValue()
дочерние процессы; разве они не гарантируют соблюдение соглашений для родительских процессов?
Это недостаток в дизайне языка или просто в реализации? Есть ли аргумент, что это хорошая идея?
источник
java
Команда в Java 6 и Java 7 и , кажется, реагируют с кодом ненулевым , если перехватывается исключение.Ответы:
Если Спецификация языка Java не определяет явно, какое выходное значение ожидать, тогда оно не определено, и вы не должны полагаться на него.
Вам нужно перехватить Throwable в вашем основном методе и вызвать System.exit (1) самостоятельно.
источник