我正在尝试编写一个程序,从命令提示符编译另一个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) {
}
答案 0 :(得分:2)
这是正常的:两个命令意味着两个进程。您需要两个ProcessBuilder
,并在执行第二个进程之前检查第一个进程的返回值。
此语法:
new ProcessBuilder("javac","Mocha.java","&&","java","Mocha");
不起作用。 &&
是一个逻辑 shell 运算符,javac
命令不理解它。直接用Java编写处理逻辑:
if (p1.waitFor() == 0) // compile succeeded
// initiate second process
答案 1 :(得分:1)
提到的语法适用于shell,而不适用于java ProcessBuilder。
选项一是启动shell并执行shell命令。另一种是两次调用ProcessBuilder。一个用于javac另一个用于java