2011-04-12 174 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

相關問題