簡體   English   中英

使用Java執行jar文件只能在pc到pc的基礎上運行

[英]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");

[3]

暫無
暫無

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

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