0

I have a Java program that I want to be able to automatically restart (say, in the event of a detected fatal error, the user has the choice to restart or quit). How can I do this?

Ky -
  • 30,724
  • 51
  • 192
  • 308
  • look at http://stackoverflow.com/questions/11906769/java-restartapplication-method-only-restarts-once?rq=1 – Pascal Le Merrer Mar 11 '14 at 16:44
  • How would you know that you had a fatal error? The VM would exit, right? You could spawn a small helper application that starts when you're application starts and periodically checks on the main application, restarting it when necessary. You could also install an application as a service (in Windows) or equivalent in other OSs. But I think you should be thinking on the model of "fail, don't resume." You should try to understand why a program failed before simply restarting. – mttdbrd Mar 11 '14 at 16:47
  • 1
    Depending on your requirements you might find http://serverfault.com/questions/83963/alternatives-to-nagios useful for a discussion on some external monitoring applications, for example [Shinken](http://www.shinken-monitoring.org/) – andyb Mar 11 '14 at 16:52

1 Answers1

0

You cannot recover from a real fatal Error, launched by the JVM. You can recover from an Exception launched by your own program, but I cannot imagine when just restarting the application is a good solution. An elegant recovery should include treat each issue differently: You cannot find a file? Ask the user for the proper path. You cannot connect to internet? Give a second try option to the user, just in case he forgot to turn on the wifi... and so on.

Said that, that's my proposal: You have to catch the error and then just call the initial method:

public class Example {
    ...

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

    ... //Needed methods
}

But as I said before, I would not implement this solution.

Pablo Lozano
  • 10,122
  • 2
  • 38
  • 59