2011-03-01 25 views
0

我想設置的路徑在我的Java程序與此Windows命令(此路徑包含在我的程序的本地外圍使用的一些DLL文件):爲什麼我可以在命令提示符下設置路徑,但不是我的程序?

c:\>path=%path%;"C:\Users\NetBeansProjects\IPTV1.7\3rd_party" 

但是,這會導致異常時的程序運行:

java.io.IOException的:不能運行程序 「路徑=%路徑%; C:\ Users \用戶的NetBeansProjects \ IPTV1.7 \ 3rd_party中\」:CreateProcess的錯誤= 2,系統無法找到該文件指定

我不知道爲什麼我可以在命令提示符下設置沒有問題的路徑,但是隨後得到代碼中拋出的異常。

String path = "C:\\Users\\NetBeansProjects\\IPTV1.7\\3rd_party\\"; 
Runtime rt = Runtime.getRuntime(); 
Process p = rt.exec("path=%path%;"+ path); 
+0

當你說本地外設,你是什麼意思?在某些時候,你正嘗試從你的Java程序中啓動另一個進程,你想要做的是控制啓動過程獲取的路徑? – 2011-03-01 14:29:18

回答

4

你的命令

path=%path%;"C:\Users\NetBeansProjects\IPTV1.7\3rd_party" 

是不是 「真正的」 Windows命令,但只有一個變量賦值,你的shell(CMD.EXE)解釋,纔可見在同一個shell會話中以及從那裏開始的任何命令(其他程序)。

當試圖用Runtime.exec()從Java執行此操作時,Windows CreateProcess函數試圖找到一個帶有這個奇怪名稱的可執行文件,這個名字顯然不存在(不能存在,我想)和你得到這個錯誤。

即使你可以通過調用CMD.EXE執行此,例如,它只會影響這一相同的cmd.exe進程(和任何程序從那裏開始,而不是你自己的Java程序(和計劃從這裏開始)。

根據您其實想要的東西,你可以,例如:

  • 給人以的ProcessBuilder路徑直接向這實際上需要它(如阿倫表現)爲
  • 搜索自己的過程可執行文件,如果您想要在下一個中查找命令
  • 將變量賦值和其他命令放在.BAT或.CMD文件中並執行此操作。
3

當在命令提示鍵入此,所述程序cmd處理它,並改變PATH變量爲您服務。當您嘗試與此Runtime,沒有創建cmd過程,有你的硬盤上沒有命令「path=%path%;C:\Users\NetBeansProjects\IPTV1.7\3rd_party\」(Windows實際上試圖找到一個程序,這個確切的名字)。

把命令在.BAT.CMD文件。 Windows會自動創建一個cmd進程爲您執行它們。

+0

謝謝你的有價值的建議。我設置了一個bat文件。 – sajad 2011-03-01 19:16:44

3

您可以使用ProcessBuilder在Java中生成一個進程並控制它得到了環境。因此,您將使用ProcessBuilder環境方法設置PATH環境變量,然後設置相關的命令行,然後啓動。因此,像(未經考驗):

ProcessBuilder b = new ProcessBuilder(); 
    b.environment().put("PATH", whatever); 
    b.command(whatever); 
    Process p = b.start(); 
+0

謝謝你的有價值的建議。我設置了一個bat文件。 – sajad 2011-03-01 19:16:21

相關問題