2016-01-21 185 views
0

我已经在标题 中搜索了适合解决问题的解决方案,并且没有任何答案适用于我的代码。重新启动Java应用程序

我需要做的是启动一个Java应用程序,并根据需要重新启动它。

附加的实现没有这样做。

有什么建议吗?

StringBuilder cmd = new StringBuilder(); 
    cmd.append(System.getProperty("java.home") + File.separator + "bin" + File.separator + "java "); 
    for (String jvmArg : ManagementFactory.getRuntimeMXBean().getInputArguments()) { 
     cmd.append(jvmArg + " "); 
    } 
    cmd.append("-cp ").append(ManagementFactory.getRuntimeMXBean().getClassPath()).append(" "); 
    cmd.append(Main.class.getName()).append(" "); 
    for (String arg : args) { 
     cmd.append(arg).append(" "); 
    } 
    Runtime.getRuntime().exec(cmd.toString()); 
    System.exit(0); 
+0

当你说'没做到',你是什么意思?当您尝试运行该代码时会发生什么? – sfThomas

+0

请附上你得到的错误。 – Prabhakaran

回答

0

exec()返回Process上,您可以拨打waitFor()的方法。这将使旧进程保持活动状态,直到(全部)新进程完成。 我怀疑因为你立即打电话System.exit(0);,新运行的子进程与父进程一起被杀死。

或者你可以创建在命令行脚本无限循环(如果你想你的应用程序终止每一次重新启动),运行你的应用程序,在bash这将是这样的:

#!/bin/bash 
while : 
do 
    command_which_starts_your_app 
    # when the command finishes, new iteration will restart your app 
done 

然后,如果您按下Ctrl-C,则取消脚本并重新启动应用程序。或者您可以使用应用程序的返回值并终止如果它> 0。