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

时间:2011-04-12 23:36:14

标签: java compiler-construction

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

我需要知道:

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

我怎么能做到这一点?

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:1)

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

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编码器。我想你可以更好地改进我的代码;)..如果你这样做,请通知我。我也在how to communicate with the created process

寻找答案

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果你主要做代码片段,你可以尝试使用Jython运行Python代码。有关详细信息,请参阅Howto multithreaded jython scripts running from java?