簡體   English   中英

使用Java使用Runtime.getRuntime()。exec打開外部.jar

[英]Open external .jar with Runtime.getRuntime().exec with java

所以我有這段代碼可以正常工作,它從我在PC中配置為紅色ubication的另一台計算機啟動.jar文件

Runtime.getRuntime().exec("java -jar Z:\\AAA\\BBB\\CCC\\ZZZ.jar");

但是現在我想從外部路徑啟動.jar而不使用快捷方式(所以我可以在未配置紅色泛濫的機器上使用此代碼啟動它)

Runtime.getRuntime().exec("java -jar MMM\\NNN LLL\\OOO\\AAA\\BBB\\CCC\\ZZZ.jar");

但是可以完成工作(我可以手動訪問和打開文件而不會出現問題)。

當我在命令提示符下輸入java -jar MMM\\\\NNN LLL\\\\OOO\\\\AAA\\\\BBB\\\\CCC\\\\ZZZ.jar ,它返回我Error: Unable to access jarfile MMM\\NNN ,所以可能是一個問題是路徑在文件夾名稱中有一個空格,但是我認為這可能也是其他原因。

問題是,如果問題是空間,我該如何解決? 我找不到辦法。 另一方面,我如何在另一台機器上運行它? 我必須以某種方式使用那個紅色的泛化IP?

PD:使用此代碼,它返回我為true

File f = new File("\\\\MMM\\NNN LLL\\OOO\\ZZZ.jar");
System.out.println(f.exists()); //--> true

因此,看起來空格不會干擾路徑(啟動時測試中的四個“ \\”似乎沒有任何作用)

我聽說其他人有這樣的問題。 這樣做的主要原因是,Java exec方法可能不支持網絡(SMB)。 因此,它甚至都不會嘗試從網絡打開。

無論如何,從網絡運行這樣的代碼可能不是最佳解決方案。 首先,網絡可能不可用,或者即將到來的Java文件可能已損壞。 如果您想正確執行此操作,則有以下幾種選擇:

  1. 可以工作的簡單選項:

創建一個有效的bat文件並執行該文件-您甚至可以先在本地復制該文件,以確保該文件首先可用(如果文件很大並且網絡出現故障)

  1. 更好的解決方案:

使用java將文件復制到工作目錄並從那里執行。

通過下載執行此操作的一個好處是可以維護文件的版本(哈希?),因此如果文件相同,則不必下載。 或者,您也可以回退-如果網絡驅動器不可用,請執行上次下載的版本。

  1. 為該jar使用本地Maven存儲庫和依賴項:)

這樣,它將把jar的版本保留在本地,而不必每次都下載。 如果可用,它還將下載一個新版本,並且代碼將成為主流(例如,不依賴於平台/個人計算機)

@MadProgrammer給出的答案很好用!

ProcessBuilder builder = new ProcessBuilder("java",  "-jar", "MMM\\NNN LLL\\OOO\\AAA\\BBB\\CCC\\ZZZ.jar");
try {
    builder.start();
} catch (IOException e) {
    e.printStackTrace();
}   

非常感謝! 無論如何要檢查Veselin Davidov發表的想法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM