使用Java执行jar文件仅适用于PC

时间:2019-01-16 15:46:35

标签: java windows jar process

我正在尝试为Java应用程序创建启动器,该启动器将自动更新/下载计算机用户主区域中的jar文件,然后继续执行它。

我试图同时使用Process和Runtime类来运行jar文件,除了在我自己的PC上取得成功外,我什么都没有,但是似乎有1:10的人尝试了这种分布式软件(也在jar中)表单)似乎无法运行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%的成功。

2 个答案:

答案 0 :(得分:3)

如果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 });

答案 1 :(得分:1)

您的原始代码在以下前提下运行,即“ java”(通常)在“ PATH”上可用(或特别是在当前工作目录中可用)。

@Karol的观点可能也是一个问题! (exec(String[])exec(String)更好)

但是,调用Java /与(OS)'PATH'变量的存在和内容无关的一种更可靠的方法是在前面加上System.getProperty("java.home")/bin/java。 (因为这是always sethas precedence over eventual OS variables) 现在,您只需要为PATH_EXT变量祈祷。 :)(例如Windows中的“ .exe; .bat ...”)...但是有一个不错的希望:(在客户端计算机上)至少已安装并正在运行一个jvm! :)

为使程序更具可移植性,应 将所有/\(与平台相关的路径分隔符)替换为:

System.getProperty("file.separator");

[3]

相关问题