2016-01-21 187 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。