如何使用多个命令通过processbuider编译和运行java文件?

时间:2015-01-24 16:46:16

标签: java

   Process p = Runtime.getRuntime().exec("javac Test.java"); 
   Process q = Runtime.getRuntime().exec("java Test");
   p.waitFor(); 

   BufferedReader reader = new BufferedReader(new InputStreamReader(q.getInputStream())); 
   String line; 
   while((line = reader.readLine()) != null) { 
       System.out.println(line); 
   } 

这不起作用......也不会返回错误和输出。 另外,我想问一下什么是更好的流程或流程构建者

2 个答案:

答案 0 :(得分:1)

您的代码同时启动javacjava进程。当然,如果javac进程仍然有效,则不应尝试对其结果运行java

因此,您应该在创建流程p.waitFor()之前将q 放在之前,并且只有在流程q成功时才创建流程p

要知道p是否成功,您应该在waitFor()之后检查流程的返回代码:

int exitVal = p.exitValue();

如果不为零,您可以通过阅读错误流来检查错误。目前,您正在尝试获取输入流(这是进程的输出流)。但错误会打印到错误流中(就像在自己的程序中使用System.err.println()一样)。为此,您需要拨打p.getErrorStream()而不是p.getInputStream(),然后阅读并打印。

如果exitVal为零,并且只有那时,您可以创建另一个进程,因为您知道编译成功并且您有一个等待运行的.class文件。

答案 1 :(得分:0)

除了RealSkeptics的回答,您可能还想看看JDK附带的tools.jar。它包含一个可以直接调用的javac版本,因此更容易调试。

还有其他运行时编译器。例如Eclipse附带的那个。