我一直在努力了一段時間,現在這個問題,我似乎無法修復它。 我已經嘗試了不同的方法(Runtime.exec(),ProcessBuiler),但似乎沒有工作。Java在Linux上執行進程
這是我的問題。 我有一個永遠在線的筆記本電腦。這檯筆記本電腦運行一個java工具通過USB連接到一個arduino打開和關閉房子裏的燈。我自己創建了這個程序,因此我也在做一些定期的維護工作。最近我添加了一個按鈕來從我的html界面重新啓動程序(如果我有更新,或者由於其他原因,我可能需要重新啓動程序或者我決定在不久的將來實現自動更新)。
這個想法背後是從第一個實例啓動應用程序的第二個實例,然後System.exit(0)第一個實例。
出於某種原因,我無法啓動應用程序的第二個實例。 這是一些代碼。
public void shutdown(boolean restart) {
if (this.serial != null) {
this.serial.disconnect();
}
if (restart) {
System.out.println(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
String startupCommand = "java -jar \"" + this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath().replace("%20", " ") + "\"";
ProcessBuilder builder = new ProcessBuilder();
// String[] command = new String[1];
// command[0] = "-jar \"" + (System.getProperty("user.dir") + "/Home_Automation_Executor.jar") + "\"";
try {
// //System.out.println("Restarting Home Automation with command: " + command[0]);
// System.out.println("Restarting Home Automation with command: " + startupCommand);
// Runtime.getRuntime().exec("bash");
// Process proc = Runtime.getRuntime().exec(startupCommand);
Process proc = builder.command(startupCommand).start();
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<ERROR>");
while ((line = br.readLine()) != null) {
System.out.println(line);
}
System.out.println("</ERROR>");
int exitVal = 0;
try {
exitVal = proc.waitFor();
} catch (InterruptedException ex) {
Logger.getLogger(Engine.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Process exitValue: " + exitVal);
} catch (IOException ex) {
ex.printStackTrace();
}
}
System.out.println("Terminating Home Automation");
System.exit(0);
}
產生java.io.IOException:不能運行程序 「Java的罐子」/用戶/夢遊者/ Dropbox的/開發/源代碼/ Java的/ NightWare工具/家庭自動化/家庭自動化執行人/距離/ Home_Automation_Executor .jar「」:error = 2,在java.lang.ProcessBuilder.start(ProcessBuilder.java:460) home.automation.executor.webserver.HTTPGenerator._handleActionCommand(HTTPGenerator.java:190) at home.automation.executor.webserver.HTTPGenerator._generateHTTPPage(HTTPGenerator.java:165) at home.automati on.executor.webserver.HTTPGenerator.getHTTPPage(HTTPGenerator.java:58) at home.automation.executor.webserver.HTTPRequestHandler.run(HTTPRequestHandler.java:160) 導致:java.io.IOException:error = 2,沒有這樣的文件或目錄 at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess。(UNIXProcess.java:53) at java.lang.ProcessImpl.start(ProcessImpl.java:91) 在java.lang.ProcessBuilder.start(ProcessBuilder.java:453) ... 5個
這 「某種原因」,實際上是? – 2012-07-21 16:25:04