我有一个应用程序,它使用调用.dll的.jar中的方法。这在我的机器上工作正常(当应用程序被解包或以.jar本身运行时)但是当application.jar在另一台机器上运行时,系统路径上有外部.dll,它无法运行dll文件
.dll必须位于特殊位置吗?我假设它在系统路径上就可以找到它。
提前致谢
Dougie
答案 0 :(得分:4)
java.library.path解决方案并不总是很好:在许多情况下您无法更改JVM参数。更好的解决方案:
1)已经提到:将DLL放在与JAR相同的目录中,遗憾的是它使得这样的JAR使用更加困难 - 现在JAR不仅仅是一个JAR,而且还有一个附带的DLL
2)将DLL作为普通资源放入JAR中,在JAR启动期间将此DLL提取到某处,例如$ TMP,然后使用System.load(new File(...)),如上所示。那么这个JAR只是一个JAR,这个JAR的用户甚至可能不知道它使用任何DLL
你也可以使用Maven NAR插件,如果你使用Maven进行构建,这个插件非常强大。见http://duns.github.com/maven-nar-plugin/
答案 1 :(得分:1)
尝试使用:
File dll = new File([...]);
System.load(dll.getAbsolutPath());
我会将dll打包在与jar-archive相同的目录中。
答案 2 :(得分:0)
我建议将它放在与您的应用程序相同的文件夹中。话虽如此,“它无法运行dll文件”有点模糊......你确定它不是一个问题,其他DLL是一个不同的版本(因此没有正确加载,而不是在全部)?
此外,库搜索路径由java.library.path parameter定义。
答案 3 :(得分:0)
假设您正在使用Sun JVM,可以通过在命令行上设置java库路径在命令行上指定本机库的位置。
这可以通过选项“-Djava.library.path = dll directory”来完成
它可以取决于如何在java源代码中加载库。你有权访问吗?你可以发布代码吗?
如果java代码使用System.load(String),它将指向dll的完整路径。
如果它使用System.loadLibrary(String),它只需要库名,并将在java.library.path参数指定的位置进行搜索。