【问题标题】:Compile and run source code from Java application从 Java 应用程序编译和运行源代码
【发布时间】:2011-05-08 02:09:21
【问题描述】:

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

我需要知道:

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

我怎样才能做到这一点?

【问题讨论】:

    标签: java compiler-construction


    【解决方案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 第一个用于编译的函数中使用的 2 个函数。将地址更改为您的编译器位置。并返回日志(以防编译失败)以查看错误。

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

    我不是一个很好的 java coder 。我想您可以更好地改进我的代码;) .. 如果您这样做,请通知我。我也在寻找how to communicate with the created process的答案

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

        • 有很好例子的有用链接。
        【解决方案4】:

        您可能想要使用Runtime.exec() 来调用相应的编译器。查看JavaDoc 了解有关如何处理输出等的更多信息。

        【讨论】:

          【解决方案5】:

          如果您主要编写代码 sn-ps,您可以尝试使用 Jython 运行 Python 代码。详情请见Howto multithreaded jython scripts running from java?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多