2010-11-13 134 views
3

我想調用位於Java應用程序內的文件夾中的編譯器(非標準)。所以我寫了這樣的代碼:.jar文件中的路徑問題

Process p = Runtime.getRuntime().exec("closures/bin/javac " + filename); 

它的工作! 但是現在我想將這個編譯器和我的.class文件一起打包到一個.jar文件中。我的文件夾結構是類似的東西:

  • 的.class(很多類)

  • 關閉/(文件夾)

但是,當線從罐子上面提到的文件(調用子文件夾中的編譯器)執行,我得到這個:

Exception in thread "main" java.io.IOException: Cannot run program "closures/bin/javac": java.io.IOException: error=2, No such file or directory 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) 
at java.lang.Runtime.exec(Runtime.java:610) 
at java.lang.Runtime.exec(Runtime.java:448) 
at java.lang.Runtime.exec(Runtime.java:345) 
at Main.main(Main.java:44) 

Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory 
at java.lang.UNIXProcess.<init>(UNIXProcess.java:164) 
at java.lang.ProcessImpl.start(ProcessImpl.java:81) 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) 
... 4 more 

在我看來,一條路徑問題。

我在做什麼錯?

謝謝。

回答

2

您無法在jar文件中執行可執行文件。在致電Runtime.getRuntime().exec()之前,您必須提取它。

再想一想,Runtime.getRuntime().exec()使用你的操作系統的功能。你的操作系統不知道.jar文件。你必須提取它。

0

僅僅從你的模糊描述,你爲什麼認爲你的應用程序的密碼是與閉包相同的文件夾?它看起來像你對我是從的.class運行它,所以你可能會想至少

Process p = Runtime.getRuntime().exec("../closures/bin/javac " + filename); 

但是這仍然沒有調用它的最可靠的方法。