2012-06-10 64 views
0

我正嘗試使用java在絕對位置運行批處理文件。該批處理文件將編譯幾個java文件。Runtime.exec不會執行任何操作...(無錯誤)

這是我一直在努力代碼:

String s=file.getAbsolutePath() + "\\compile.bat"; 
Runtime rut = Runtime.getRuntime(); 
try { 
    rut.exec(new String[] {file.getAbsolutePath() + "\\compile.bat"}); 
}catch(IOException e1) { 
    e1.printStackTrace(); 
} 
System.out.println(s); 

現在,當這段代碼被執行,我沒有得到任何控制檯錯誤,但該批處理文件無法運行。但是,當我通過Windows資源管理器運行批處理文件時,該批處理文件起作用,編譯文件並在完成時關閉。

回答

2

你怎麼知道沒有控制檯錯誤?

試試這個:

String s=file.getAbsolutePath() + "\\compile.bat"; 
Runtime rut = Runtime.getRuntime(); 
try { 
    Process process = rut.exec(new String[] {file.getAbsolutePath() + "\\compile.bat"}); 
    // prints out any message that are usually displayed in the console 
    Scanner scanner = new Scanner(process.getInputStream()); 
    while (scanner.hasNext()) { 
     System.out.println(scanner.nextLine()); 
    } 
}catch(IOException e1) { 
    e1.printStackTrace(); 
} 
System.out.println(s); 
+0

好的,修復它。謝謝! –

+0

@Jeff:不要忘記捕獲並閱讀錯誤流,正如John Wesley王子的有用(但已刪除)答案中所建議的。 –

+0

@PrinceJohnWesley:投票取消你的答案。 –

0

注意使用調用時的Runtime.exec工作命令的目錄執行將是java程序的當前工作目錄這一點。您的批處理文件是否需要在特定目錄中運行?

如果您需要爲子進程設置特定的工作目錄,則需要使用Runtime.exec的另一個版本。

+0

是,該批處理文件是在一個文件夾與需要編譯所有的java文件一起,所以通過_javac_引用的文件是相對於該批處理文件的位置。 –

+0

聽起來像你需要指定工作目錄然後。只需爲要執行的_command指定絕對路徑,不會**設置該命令的工作目錄。 – pb2q

1

使用exitValue()檢查子流程的返回值。 如果存在的值不爲零,還請閱讀錯誤流getErrorStream()

+0

爲什麼downvote ??? –

相關問題