我正在使用JNI在封闭源PDF library中包含一些本机函数。它有一个从属fonts
目录,该目录必须位于调用应用程序目录的子文件夹中。根据我的经验,基于当前工作目录进行搜索是标准的。因此,问题。
将JNI代码加载到Java应用程序时,当前工作目录是正确的。但是,调用应用程序的目录是java.exe
的bin目录。我已经验证将fonts
文件夹中的依赖C:\Program Files (x86)\Java\jre6\bin
文件夹按预期工作。
库似乎正在使用C ++ GetCommandLine()
调用,或类似的东西来确定fonts目录的位置。显然,这是一个不可接受的解决方案。
我想避免拨打外部EXE。但我提出的唯一解决方法是:
Runtime.exec()
执行。 ( 工作)关于如何规避这个问题的任何想法?当Java应用程序编译为可运行的JAR时,结果命令行仍然是JRE的C:\Program Files\...java.exe
?
答案 0 :(得分:2)
Java可执行文件制作者可以从Java应用程序创建可执行的* .exe,而无需任何本机编码或编译。您可以将该可执行文件,jar文件,字体和其他应用程序依赖项放入单个安装目录中。
Exe4j是支持Windows的可执行程序制造商之一。它不需要关于当前工作目录的任何假设。这对于在启动应用程序时无法控制工作目录的常见情况非常重要。