2011-04-12 90 views

回答

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;      
     } 

这是用来编译我的美迪第一个使用2种功能。将地址更改为编译器位置。并返回日志(如果编译失败)以查看错误。

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

我不是一个很好的java编码器。我想你可以更好地改善我的代码;)..如果你确实请告诉我。我也在寻找how to communicate with the created process

+0

这是非常基本的,但给出一个不错的起点+1。 – 2011-05-07 22:00:28

+0

你还需要什么? – shababhsiddique 2011-05-08 04:07:55

0

你可能会想要使用Runtime.exec()来调用各自的编译器。请查看JavaDoc了解更多关于如何处理输出的信息等。

1

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

您可能会发现下面的例子有所帮助:

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

要获得运行Process的返回代码,只需使用waitFor()方法。如果你不关心任何输出并只想返回值,这很方便。

+0

有用的链接,很好的例子。 – 2011-04-12 23:56:05

相关问题