2013-05-16 69 views
1

好的netbeans Java 7u17項目。我試圖執行一個具有以下方式依賴外部jar文件:嘗試執行外部jar時無法訪問jar文件,因爲進程

ProcessBuilder pb = new ProcessBuilder(new String[]{"java", "-jar", String.format("%s %s", path, cmde)}); 
pb.redirectErrorStream(true); 
Process proc = pb.start(); 

當我執行這個應用程序,我得到了以下錯誤消息:

Error: Unable to access jarfile C:/Users/XXXX/Documents/SampleApplication/ProcessTest/proc.jar -k 

的JAR文件有其依賴關係(其他jar文件)緊靠它在一個名爲lib的文件夾中。當我打開PowerShell中或命令提示符並手動輸入

java -jar C:/Users/XXXX/Documents/SampleApplication/ProcessTest/proc.jar -k 

該應用程序是完美執行。爲什麼不從我的Java應用程序?我嘗試了很多來自堆棧溢出類似問題的答案,但沒有一個能夠工作。一些示例: - 重新啓動的NetBeans的 - 關閉&重新開放項目 - 重建proc.jar

感謝每一個幫助 - 喬伊

回答

2

我也解決不了它,但我有一個解決方法。
創建是運行在罐子蝙蝠腳本並執行這樣的bat文件:

ProcessBuilder pb = new ProcessBuilder("c:\\...\\runproc.bat"); 

編輯:

您需要通過一個,分裂像命令參數之一:

ProcessBuilder("java", "-jar", path, arg1, arg2, ...) 
+0

其實我不能創建一個蝙蝠,因爲我不知道應用程序將運行在什麼樣的操作系統上。我選擇了JAVA,因爲它被認爲是跨平臺的,但到目前爲止它似乎完全相反。 : -/ – Wrath

+0

試試這個:ProcessBuilder pb = new ProcessBuilder(「java」,「-jar」,path,cmde); –

+0

哦,我的天啊。這實際上看起來很有希望。現在應用程序運行,但似乎有價值的命令行參數被打破。我想我可以解決這個問題。 – Wrath

0

對不起,我回答,我不能作出評論,但也許你應該使用:

//This is correct 
String path = "C:\\xxx\\xxx"; 
//This is incorrect 
String path = "C:/xxx/xxx"; 

我只是假設,因爲你的輸出顯示「/」而不是Windows標準「\」。

+0

兩者都是正確的。正如我所說如果我在PowerShell中輸入java -jar C:/Users/XXXX/Documents/SampleApplication/ProcessTest/proc.jar -k proc.jar得到執行沒有錯誤。 – Wrath

+0

我對PowerShell一無所知,但也許你應該嘗試在Powershell中執行它,除了在本機控制檯中。我假設PowerShell可能會將「/」換成「\」。這只是一個猜測。編輯:沒關係,我看你說你已經在一個本地控制檯上運行它了。 –

+0

另外,僅供參考,Java中用於Windows的任何類型的路徑都需要有兩個「\」。您不能在Java中使用帶「/」的Windows路徑運行命令,因爲它不是標準的。只有* nix系統使用「/」。 –