2011-10-03 111 views
0

我通過Runtime.exec(「javac MyFrog.java」)編譯java文件; 它說沒有錯誤,不輸出任何東西,但不創建MyFrog.class文件。 如果我編寫Runtime.exec(「javac」)它會輸出以輸出一些幫助文本。 所以我明白,程序正在工作,但不要創建類文件。權限沒問題。Runtime.exec不編譯java文件

+0

你試過'javac -verbose'嗎? –

回答

0

確保MyFrog.java存在於工作目錄

+1

沒有參數和javac的javac <缺少文件> .java將打印到stderr。如果他能夠看到從一個錯誤輸出,他應該能夠從另一個看到它? –

0

嘗試javac -verbose,並確保您的類路徑設置正確。

+0

我在評論中寫了關於-verbose的一段錯誤的類路徑,他將得到一個錯誤輸出。 –

0

可以使用的ProcessBuilder或的Runtime.exec()方法創建新的進程,

String []cmd={"javac","Foo.java"}; 

Process proc=Runtime.getRuntime().exec(cmd); 
proc.waitFor(); 

或者使用的ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("javac.exe","-verbose", "Foo.java"); 

pb.redirectErrorStream(true); 
Process p = pb.start(); 
p.waitFor(); 

InputStream inp=p.getInputStream(); 
int no=inp.read(); 
while(no!=-1) 
{ 
System.out.print((char)no); 
no=inp.read(); 
} 
+0

爲什麼?是否需要更改環境以調用javac? –

+0

@HemalPandya - 對不起!這是我的錯誤。 – adatapost

+0

我還是不明白這是否能解決這個問題,因爲他能夠看到來自'javac'的輸出。 –

2

javac -verbose應該給你更多的信息,特別是所在的目錄文件已創建。既然你能夠識別沒有任何參數的輸出幫助文本,我假設你正在捕獲進程的stderr,並且假設你對stdout也是這樣做的(儘管javac似乎沒有向stdout寫任何東西)。

你在哪裏檢查.class文件的存在?它與.java文件在同一個目錄中創建。如果MyFrog.java有包聲明,它將在包子目錄中創建而不是;因爲你必須使用-d參數。

+0

運行: [解析開始MyFrog.java] [解析完成19ms] [search源文件的路徑:。] [類文件的搜索路徑:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/resources.jar,...並繼續顯示類文件。] [總共171ms] – ardakshalkar

+0

這意味着它仍然在創建'.class'文件。你需要等待它完成。使用'Process.waitFor()'。順便說一句你在讀循環中的過程輸出和錯誤嗎?你需要。 –

+0

我做waitfor。我讀了一個錯誤流和輸出流。 如果我指定了錯誤的文件名,它會給我一個錯誤 – ardakshalkar

0

我總是會找到this資源回答有關Java exec的所有問題。