Как программно перезапустить программу Java?

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


person Ky Leggiero    schedule 11.03.2014    source источник
comment
посмотрите stackoverflow.com/ вопросы/11906769/   -  person Pascal Le Merrer    schedule 11.03.2014
comment
Как бы вы узнали, что допустили фатальную ошибку? Виртуальная машина выйдет, верно? Вы можете создать небольшое вспомогательное приложение, которое запускается при запуске вашего приложения и периодически проверяет основное приложение, перезапуская его при необходимости. Вы также можете установить приложение как службу (в Windows) или эквивалент в других ОС. Но я думаю, вы должны думать о модели неудачи, не возобновлять. Вы должны попытаться понять, почему программа не удалась, прежде чем просто перезапустить ее.   -  person mttdbrd    schedule 11.03.2014
comment
В зависимости от ваших требований вы можете найти serverfault.com/questions/83963/alternatives-to-nagios полезным для обсуждение некоторых внешних приложений для мониторинга, например Shinken   -  person andyb    schedule 11.03.2014


Ответы (1)


Вы не можете восстановиться после настоящей фатальной ошибки, запущенной JVM. Вы можете восстановиться после исключения, запущенного вашей собственной программой, но я не могу себе представить, когда простой перезапуск приложения является хорошим решением. Элегантное восстановление должно включать в себя подход к каждой проблеме по-разному: Вы не можете найти файл? Спросите у пользователя правильный путь. Вы не можете подключиться к Интернету? Дайте пользователю возможность второй попытки, на тот случай, если он забыл включить Wi-Fi... и так далее.

Сказал, что это мое предложение: вам нужно поймать ошибку, а затем просто вызвать начальный метод:

public class Example {
    ...

    public static void main(String[] args) {
        boolean exit=false;
        while(!exit) {
            try {
               runMyProgram(args);
            } catch (Exception e) {
               exit=askIfTerminateOrNot();
            }
        }
     }

    ... //Needed methods
}

Но, как я уже говорил, я бы не реализовал это решение.

person Pablo Lozano    schedule 11.03.2014