使用流程构建器执行两个命令

我正在尝试编写一个程序,从命令提示符编译另一个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 

提到的语法适用于shell,而不适用于java ProcessBuilder。

选项一是启动shell并执行shell命令。 另一种是两次调用ProcessBuilder。 一个用于javac另一个用于java