1

我有一个 java 应用程序并将其捆绑为App.jar. 我使用了一些第三方工具(让我们称之为NumberGenerator)。App.jar启动一个进程并调用NumberGenerator以获取输出。为了引用可执行文件,我使用了相对路径new File("lib/NumberGenerator.exe"),它运行良好。

现在在 Mac 上,我已经使用它捆绑了应用程序它会自动生成一个应用程序启动器。当我通过单击启动器运行时,它会启动应用程序。但它将主目录设置为~ie/Users/Jatin而不是 jar 文件所在的位置。因此我的应用程序无法检测到该lib文件夹​​(显然是因为它不在那个位置)

在我的 Java 代码中,如何将主文件夹设置为我所在的位置jar

4

4 回答 4

2

我在linux上遇到了类似的问题。我不太了解 osx 而不是 AppBundler 但在 linux 中我通过创建这个脚本解决了它

#!/usr/bin/env sh
java -Duser.dir=$(pwd) -jar myapp.jar

如果您设法通过双击来运行脚本,它可能会起作用...请参阅如何通过双击在 OS X 中运行 shell 脚本?

于 2013-03-11T07:54:02.443 回答
2
return new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());

只需检查此线程如何获取正在运行的 JAR 文件的路径?

于 2013-03-11T07:58:08.993 回答
1

我看到两种方法:

  • Info.plist中,指定java.library.path相对于$JAVAROOT,如此处引用的文章中所述

    <key>Java</key>
    <dict>
    ...    
        <key>Properties</key>
        <dict>
            <key>java.library.path</key>
            <string>$JAVAROOT/</string>
        </dict>
    ...    
    </dict>
    
  • 使用Java Web Start,它允许您按操作系统和体系结构管理本机资源。

于 2013-03-11T08:20:00.087 回答
0

你可以试试这个:

System.setProperty("user.home", "your-dir");
于 2013-03-11T07:44:14.237 回答