Как запретить вызовы System.exit() от завершения JVM?
Я почти уверен, что это невозможно, но стоит попробовать.
Я пишу интерфейс командной строки для определенного инструмента. Я говорю о приложении Java, которое вызывает другое приложение Java. Инструмент вызывает System.exit
после выполнения, что, в свою очередь, завершает мою собственную среду выполнения. Я не хочу этого.
Есть ли способ игнорировать вызовы System.exit
?
Ответы
Ответ 1
Да, это возможно с помощью SecurityManager. Попробуйте следующее (может быть, не так):
class MySecurityManager extends SecurityManager {
@Override public void checkExit(int status) {
throw new SecurityException();
}
}
В своем классе используйте следующие вызовы:
myMethod() {
//Before running the external Command
MySecurityManager secManager = new MySecurityManager();
System.setSecurityManager(secManager);
try {
invokeExternal();
}
catch (SecurityException e) {
//Do something if the external code used System.exit()
}
}
Ответ 2
Установите SecurityManager, чтобы игнорировать System.exit(), если только он не приходит из вашего кода.
Ответ 3
Вы можете разбить приложение на две части. Этот инструмент запускается первым. Затем вы запускаете вторую часть своего приложения в качестве нового процесса. Затем приложение-хозяин убивает вашу первую часть, но вторая часть все еще работает.
Таким образом, первая часть вашего приложения - это просто запуск второй части, которая, в свою очередь, является вашим реальным приложением.
Ответ 4
Что касается this (@Vonc answer), вы должны использовать Security Manager:
Попробуйте изменить TestCase для запуска с менеджер безопасности, который предотвращает вызов System.exit, а затем SecurityException.