java.library.path未在runtime.exec / ProcessBuilder中正确设置

时间:2013-11-11 06:43:18

标签: java process processbuilder

我有一个基于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. 有没有更好的方法让我的应用程序指示/发现libs / native文件的位置,避免总是传递参数?

2 个答案:

答案 0 :(得分:2)

或者,您可以通过ProcessBuilder.environment()

将本机库的路径添加到PATH env变量

答案 1 :(得分:1)

如果删除路径周围的引号会怎样?引号由shell解析,直接从Java生成进程时不需要。