gpt4 book ai didi

java - 使用进程构建器执行两个命令

转载 作者:行者123 更新时间:2023-11-29 03:32:50 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,从命令提示符编译另一个 java 文件。但是我遇到了问题。此时,它正在成功执行编译 Mocha.java 的第一部分。但是,我希望它也执行该文件并显示它输出的内容。它什么都不显示。有什么建议吗?

    pb = new ProcessBuilder("javac","Mocha.java");
try {
Process shell = pb.start();
OutputStream shellOut = shell.getOutputStream();
shellOut.write("java Mocha".getBytes());
shellOut.close();
InputStream shellIn = shell.getInputStream();
String response = IOUtils.toString(shellIn, "UTF-8");
System.out.println(response);
shellIn.close();
shell.destroy();
} catch (IOException ex) {
System.out.println("failed");
}

注意:

我也试过像这样最初拥有所有参数:

pb = new ProcessBuilder("javac","Mocha.java","&&","java","Mocha");

但这不仅不起作用,它甚至没有像上面那样编译 Mocha.java。

谢谢!

编辑:

所以我把它改成了两个进程。现在效果很好,伙计们!对于任何感兴趣的人:

    pb = new ProcessBuilder("javac","Mocha.java");
try {
Process shell = pb.start();
int error = shell.waitFor();
shell.destroy();
if (error == 0)
{
pb = new ProcessBuilder("java","Mocha");
shell = pb.start();
InputStream shellIn = shell.getInputStream();
String response = IOUtils.toString(shellIn, "UTF-8");
System.out.println(response);
shellIn.close();
shell.destroy();
}
} catch (IOException ex) {
System.out.println("failed");
} catch (InterruptedException ex) {
}

最佳答案

这很正常:两个命令意味着两个进程。您需要两个 ProcessBuilder,并在执行第二个进程之前检查第一个进程的返回值。

此语法:

new ProcessBuilder("javac","Mocha.java","&&","java","Mocha");

不起作用。 && 是一个逻辑shell 运算符,javac 命令不理解它。改为直接在 Java 中执行处理逻辑:

if (p1.waitFor() == 0) // compile succeeded
// initiate second process

关于java - 使用进程构建器执行两个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com