[英]Executing jar file using Java only works on a pc to pc basis
我正在嘗試為Java應用程序創建一個啟動器,它將自動更新/下載計算機用戶主區域中的jar文件,然后繼續執行它。
我已經嘗試使用Process和Runtime類運行jar文件,我在我自己的電腦上只有成功,但似乎1:10人嘗試這種分布式軟件(也是罐子形式)可以似乎要運行jar文件(作為參考,我確保所有測試此應用程序的人都安裝了最新版本的Java)。
負責運行jar文件的代碼如下:
public static void startApplication() {
try {
Process proc = Runtime.getRuntime().exec("java -jar "+(saveDirectory + fileName));
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
我期望jar文件fileName在位置saveDirectory中打開,但是在pc到pc場景中並非總是這樣。 我只是想知道是否有更好的方法可以確保100%的成功。
如果user.home
包含空格,則這可能不起作用,因為命令按原樣計算,因為它是作為String
提供的。 使用Runtime.exec(String[])
版本:
Runtime.getRuntime().exec(new String[] { "java", "-jar", saveDirectory + fileName });
此外,您可能希望規范化JAR路徑:
Path path = Paths.get(saveDirectory, fileName);
String fullPath = path.normalize().toAbsolutePath().toString();
Runtime.getRuntime().exec(new String[] { "java", "-jar", fullPath });
您的原始代碼在前提下運行,“java”(通常)可用於“PATH”(或特別是在當前工作目錄中可用)。
@Karol的觀點也可能是一個問題! ( exec(String[])
比exec(String)
好得多)
但是,一種更可靠的方法來調用java /獨立於(OS)'PATH'變量的存在和內容,預先掛起: System.getProperty("java.home")/bin/
to java
。 (因為這總是設置 ,並且優先於最終的OS變量 )現在你只需要祈禱PATH_EXT
變量。 :)(例如“ .exe; .bat ...”在Windows中)...但是有一個不錯的希望:那里(在客戶端機器上)至少安裝並運行了一個jvm! :)
為了使您的程序更具可移植性,您應該將所有/
s和\\
s(平台相關路徑分隔符)替換為:
System.getProperty("file.separator");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.