使用 Java 执行 jar 文件只能在 PC 到 PC 的基础上工作



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

我尝试使用进程和运行时类运行 jar 文件,在我自己的 PC 上我只取得了成功,但似乎尝试这种分布式软件(也是 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();
        }
    }

我希望在位置 saveDirectory 中打开 jar 文件文件名,但在 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)

但是,独立于(OS)"PATH"变量的存在和内容调用java/be的更可靠的方法是,pre-pend:System.getProperty("java.home")/bin/java。(因为这始终是设置的,并且优先于最终的操作系统变量)现在你只需要为PATH_EXT变量祈祷。:)(例如".exe;.蝙蝠..."在窗口中)...但有一个体面的希望:(在客户端计算机上)至少安装并运行了一个 JVM!:)

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

System.getProperty("file.separator");

[3]

相关内容

最新更新