从Java应用程序编译并运行源代码

我需要从我的Java应用程序编译和运行用Python,Pascal或C编写的源代码(单个文件)。

我需要知道:

  • 如果编译过程成功
  • 已编译程序的返回输出

我怎么能做到这一点?

我一直在做同样的事情..

public String compile() { String log=""; try { String s= null; //change this string to your compilers location Process p = Runtime.getRuntime().exec("cmd /C \"C:\\Program Files\\CodeBlocks\\MinGW\\bin\\mingw32-g++.exe\" temp.cpp "); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); boolean error=false; log+="\n....\n"; while ((s = stdError.readLine()) != null) { log+=s; error=true; log+="\n"; } if(error==false) log+="Compilation successful !!!"; } catch (IOException e) { e.printStackTrace(); } return log; } public int runProgram() { int ret = -1; try { Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("cmd.exe /c start a.exe"); proc.waitFor(); ret = proc.exitValue(); } catch (Throwable t) { t.printStackTrace(); return ret; } return ret; } 

这是我的MiDE中使用的两个函数,第一个用于编译。 将地址更改为编译器位置。 并返回日志(如果编译失败)以查看错误。

第二个运行编译的代码。 返回退出代码以检查它是否正确终止。

我不是一个非常好的java编码器。 我想你可以更好地改进我的代码;)..如果你这样做,请通知我。 我也在寻找如何与创建过程进行通信的答案

您可以使用java.lang.ProcessBuilder来执行命令并检查状态。 这里是JAVADOC: http : //download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html

通常,您需要启动一个运行外部程序的Process (首先是编译器,然后是编译后的二进制文件),使用Runtime.getRuntime().exec()ProcessBuilder来生成Process (由于您的编译器可能需要一组复杂的选项,因此ProcessBuilder可能是更好的选择。 这将允许您在执行时从进程中获取输出(因此您可以监视编译器输出以获取警告或错误)以及返回代码。

您可能会发现以下示例很有用:

http://www.rgagnon.com/javadetails/java-0014.html

要获取正在运行的Process的返回码,只需使用waitFor()方法即可。 如果您不关心任何输出并且只想要返回值,这很方便。

您可能希望使用Runtime.exec()来调用相应的编译器。 查看JavaDoc以获取有关如何处理输出等的更多信息。

如果您主要执行代码片段,则可以尝试使用Jython运行Python代码。 请参阅如何从java运行的multithreadingjython脚本? 详情。