从Java应用程序编译并运行源代码
我需要从我的Java应用程序中编译并运行用Python、Pascal或C编写的源代码(单个文件) 我需要知道:从Java应用程序编译并运行源代码,java,compiler-construction,Java,Compiler Construction,我需要从我的Java应用程序中编译并运行用Python、Pascal或C编写的源代码(单个文件) 我需要知道: 如果编译过程成功 编译程序的返回输出 如何实现这一点?您可以使用java.lang.ProcessBuilder执行命令并检查状态。 这里是JAVADOC:您可能需要使用Runtime.exec()调用相应的编译器。查看以获取有关如何处理输出等的更多信息。通常,您需要启动一个运行外部程序(首先是编译器,然后是编译后的二进制文件)的进程,使用Runtime.getRuntime().
- 如果编译过程成功
- 编译程序的返回输出
如何实现这一点?您可以使用java.lang.ProcessBuilder执行命令并检查状态。
这里是JAVADOC:您可能需要使用
Runtime.exec()
调用相应的编译器。查看以获取有关如何处理输出等的更多信息。通常,您需要启动一个运行外部程序(首先是编译器,然后是编译后的二进制文件)的进程,使用Runtime.getRuntime().exec()
或ProcessBuilder
来生成进程
(由于编译器可能需要一组复杂的选项,ProcessBuilder
可能是一个更好的选项)。这将允许您在进程执行时获取它的输出(这样您就可以监视编译器输出中的警告或错误),以及它的返回代码
您可能会发现以下示例很有帮助:
要获取正在运行的进程的返回代码
,只需使用waitFor()
方法。如果您不关心任何输出,只需要返回值,那么这很方便。如果您主要做代码片段,您可以尝试使用Jython运行Python代码。有关详细信息,请参阅。我一直在做同样的事情
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;
}
这是我的第一个用于编译的函数中使用的两个函数。将地址更改为编译器位置。并返回日志(如果编译失败)以查看错误
第二个运行编译后的代码。返回退出代码以检查其是否正确终止
我不是一个很好的java程序员。我想你可以更好地改进我的代码;)。。如果你这样做,请通知我。我还想在有用的链接上找到答案,并提供一些很好的例子。