0

我有一个基于 java 的应用程序启动器,它使用ProcessBuilder(也尝试Runtime.getRuntime().exec(new String[]{}过)通过命令启动另一个 java 应用程序。

当我手动运行命令时,它可以正常工作。游戏启动,没有错误。

java -jar -Djava.library.path="./lib/natives" mygame.jar

当从启动器运行相同的命令(使用绝对路径)时:

ProcessBuilder pb = new ProcessBuilder(
        "java",
        "-jar",
        "-Djava.library.path=\"" +nativesDirectory.getAbsolutePath() + "\"",
        applicationJar.getAbsolutePath());
pb.redirectErrorStream(true);
pb.directory(applicationDirectory);

我看到以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path

我尝试了多种变体,但从 java 启动器运行时,该命令似乎永远不会正确设置库路径。

  1. 还有什么我可以尝试的吗?为什么该命令对我有用,但对启动器不起作用?我已经尝试过 ProcessBuilder,因为我担心文件路径中的空格可能会出现问题(尽管它周围有引号)

  2. 有没有更好的方法让我的应用程序指示/发现库/本机文件的位置,避免始终传递参数?

4

2 回答 2

2

或者,您可以通过 ProcessBuilder.environment() 将本机库的路径添加到 PATH 环境变量

于 2013-11-11T06:51:00.593 回答
1

如果删除路径周围的引号会发生什么?引号由 shell 解析,并且在直接从 Java 生成进程时不是必需的。

于 2013-11-12T00:29:21.050 回答