unixprocess+java+186_Java在Linux上执行过程

作者创建了一个Java工具,用于控制Arduino开关灯光。近期加入了通过HTML界面重启程序的功能,但遇到无法启动程序第二个实例的问题。尝试使用Runtime.exec()和ProcessBuilder方法均未成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我已经为这个问题苦苦挣扎了一段时间,我似乎无法解决它。我已经尝试过不同的方法(Runtime.exec(),ProcessBuiler),但是似乎都没有用。

这是我的问题。我有一台经常打开的笔记本电脑。这台笔记本电脑运行一个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("");

while ((line = br.readLine()) != null) {

System.out.println(line);

}

System.out.println("");

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 -jar” / Users / NightWalker / Dropbox /

Development /源代码/ Java /

NightWare工具/家庭自动化/家庭自动化执行器/dist/Home_Automation_Executor.jar”:错误=

2,在home.automation.executor.Engine.shutdown(Engine.java:186)处的java.lang.ProcessBuilder.start(ProcessBuilder.java:460)处没有此类文件或目录.home.automation.executor.webserver.HTTPGenerator._handleActionCommand(

HTTPGenerator.java:190)在home.automation.executor.webserver.HTTPGenerator._generateHTTPPage(HTTPGenerator.java:165)在home.automation.executor.webserver.HTTPGenerator.getHTTPPage(HTTPGenerator.java:58)在home.automation.executor

.webserver.HTTPRequestHandler.run(HTTPRequestHandler.java:160)原因:java.io.IOException:错误=

2,java.lang中没有此类文件或目录。java.lang.UNIXProcess。(UNIXProcess.java:53)处的UNIXProcess.forkAndExec(本机方法)java.lang.ProcessBuilder.start(ProcessBuilder.java:453处的java.lang.ProcessImpl.start(ProcessImpl.java:91)处的UNIXProcess.forkAndExec(本机方法)

)…另外5个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值