【发布时间】:2013-11-11 06:43:18
【问题描述】:
我有一个基于 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 启动器运行时,该命令似乎永远无法正确设置库路径。
还有什么我可以尝试的吗?为什么该命令对我有用,但对启动器不起作用?我已经尝试过 ProcessBuilder,因为我担心文件路径中的空格可能会出现问题(尽管它周围有引号)
有没有更好的方法让我的应用程序指示/发现库/本机文件的位置,从而避免始终传递参数?
【问题讨论】:
-
如果删除路径周围的引号会发生什么?引号由 shell 解析,在直接从 Java 生成进程时不需要。
-
解决了它......圣牛。如果您想将此移至答案,我会标记它。我不敢相信我与之交谈过的任何人都没有提出过这样的建议,包括我自己。
标签: java process processbuilder