Вопрос

По разным причинам звоню System.exit вызывает неодобрение при написании Приложения Java, итак, как я могу уведомить вызывающий процесс о том, что не все идет по плану?

Редактировать: Цифра 1 - это standin для любого ненулевого кода выхода.

Это было полезно?

Решение

Использование System.exit не одобряется, когда "приложение" на самом деле является подприложением (напримерservlet, апплет) более крупного Java-приложения (сервера):в этом случае System.exit может остановить JVM и, следовательно, также все другие вспомогательные приложения.В этой ситуации наилучшим вариантом является создание соответствующего исключения, которое может быть перехвачено и обработано платформой приложения / сервером.

Если java-приложение действительно предназначено для запуска как отдельное приложение, нет ничего плохого в использовании System.exit.в этом случае установка значения exit, вероятно, является самым простым (а также наиболее используемым) способом сообщения о сбое или успехе родительскому процессу.

Другие советы

Я согласен с "создать исключение- толпа.Одна из причин заключается в том, что вызов System.exit затрудняет использование вашего кода, если вы хотите, чтобы другой код мог его использовать.Например, если вы обнаружите, что ваш класс был бы полезен из веб-приложения или какого-то приложения, использующего сообщения, было бы неплохо предоставить этим контейнерам возможность каким-то образом справиться со сбоем.Контейнер может захотеть повторить операцию, решить войти в систему и проигнорировать проблему, отправить электронное письмо администратору и т.д.

Исключением из этого правила может стать ваш main() способ;это может перехватить исключение и вызвать System.exit() с некоторым значением, которое может быть распознано вызывающим процессом или сценарием оболочки.

System.exit() заблокирует и создаст взаимоблокировку, если поток, который ее инициировал, используется в перехватчике завершения работы.

Это также может быть опасно / проблематично в средах веб-сервлетов.

Создание исключения обычно считается другой альтернативой.

Политика нашей компании заключается в том, что вызывать System.exit(-1) нормально (даже предпочтительно), но только в методах init().Я бы определенно дважды подумал, прежде чем вызывать его во время обычного выполнения программы.

Создание исключений - это лучший способ отправить информацию об определенной ошибке в приложение и из него.

Число говорит вам не так много, как:

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

(или что-то близкое к этому)

К этому относятся неодобрительно из-за Нормальный выходит.Если "не все идет по плану", то System.exit в порядке.

Обновить:Я должен добавить, что я предполагаю, что ваше '1' имеет значение, которое где-то задокументировано.

Я думаю, что создание исключения - это то, что вы должны делать, когда что-то идет не так.Таким образом, если ваше приложение не запущено как автономное, вызывающий абонент может отреагировать на это и получить некоторую информацию о том, что пошло не так.Это также проще для целей отладки, потому что вы также получаете лучшее представление о том, что пошло не так, когда видите трассировку стека.

Важно отметить одну вещь: когда исключение достигает верхнего уровня и, следовательно, приводит к завершению работы виртуальной машины, виртуальная машина возвращает код возврата, равный 1, поэтому внешние приложения, использующие код возврата, видят, что что-то пошло не так.

Единственный случай, когда я думаю, что System.exit() имеет смысл, - это когда ваше приложение предназначено для вызова приложениями, которые не являются Java, и поэтому должны использовать коды возврата, чтобы увидеть, сработало ли ваше приложение или нет, и вы хотите, чтобы у этих приложений была возможность по-разному реагировать на разные сбои, т.Е.вам нужны другие коды возврата.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top