【问题标题】:Launch runnable run from native java application从本机 Java 应用程序启动可运行的运行
【发布时间】:2014-12-04 09:58:01
【问题描述】:

我目前遇到以下问题:

我有两个 java 应用程序:updater 和 client。更新程序是一个原生应用程序(其中包含必要的 JDK),而客户端只是一个可运行的 jar 文件。

当用户启动应用程序时,它基本上会启动更新程序,它会在服务器上搜索客户端应用程序的更新。当存在新更新时,更新程序会下载更新并将其放入文件中(或覆盖当前的 jar 文件)。然后,我像这样执行下载的 .jar 文件:

private void startApplication() {

    Runtime rt = Runtime.getRuntime();
    try {
        Process pr = rt.exec("java -jar libs/myJar.jar");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这在 Eclipse 中构建和运行时工作正常,但是当我运行本机应用程序(由 Eclipse 构建)时 myJar.jar 没有被执行。我认为这是由于更新程序找不到jar文件,因为它的绝对路径变得不同。

我的问题:如何确保本机应用程序可以执行下载的 jar 文件?

注意:我目前正在 Mac OSX 上构建应用程序,因此我正在使用 .dmg 对其进行测试。我不知道 Windows 或 Linux 是否也存在此问题。

编辑 1: 路径似乎没有问题,因为这似乎很好(经@Funtik 测试,谢谢)。

编辑 2: 文件权限似乎也正确。也许这与客户端 jar 不知道要使用哪个 JVM 的事实有关?

【问题讨论】:

    标签: java eclipse jar nativeapplication


    【解决方案1】:

    你必须为此使用绝对路径。

     String path = new File(".").getAbsolutePath();
     Process pr = rt.exec("java -jar "+ path + "/libs/myJar.jar");
    

    【讨论】:

    • 感谢您的回复!我刚刚尝试过,但它似乎不起作用。从 IDE 运行它时它确实可以工作,但在我编译本机应用程序并运行它时却不行。
    • 尝试将路径输出到控制台,看看你的实际位置
    • 这是路径:/Applications/MyApp.app/Contents/Java/。 ,这似乎还可以。
    • 所以client.jar的完整路径如下? /Applications/MyApp.app/Contents/Java/libs/myJar.jar?
    • 是的,它是正确的。当我从包内部运行 jar 时,一切似乎都运行良好。所以可能是包有问题。
    猜你喜欢
    • 2013-03-02
    • 2017-04-22
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多