Подтвердить что ты не робот

Как запретить вызовы System.exit() от завершения JVM?

Я почти уверен, что это невозможно, но стоит попробовать.

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

Есть ли способ игнорировать вызовы System.exit?

4b9b3361

Ответ 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.