资源路径中找不到本机库

时间:2018-04-01 08:44:52

标签: java jna

我的应用程序加载本机库(idcomm25.dll文件)。如果我从命令提示符启动应用程序" java -jar myapplication.jar"命令,或双击来自资源管理器的myapplication.jar,一切都很好。 如果我通过.bat启动应用程序(即使以'以管理员身份运行')包含与上面相同的命令,当程序尝试使用该库时,我收到错误:

Exception in thread ... java.lang.UnsatisfiedLinkError: Unable to load library
'idcomm25': Native library (win32-x86-64/idcomm25.dll) not found in resource
path ([myapplication.jar])
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:271)
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
    at com.sun.jna.Library$Handler.<init>(Library.java:147)
    at com.sun.jna.Native.loadLibrary(Native.java:412)
    at com.sun.jna.Native.loadLibrary(Native.java:391)
...

我错过了什么?

1 个答案:

答案 0 :(得分:3)

您似乎安装了64位和32位JRE。

直接从命令提示符运行或双击Jar文件时,运行64位JRE,idcomm25.dll (64位)<{1}} < / strong>文件夹将加载确定。

但是,win32-x86-64文件将您的路径更改为32位,并且您最终运行的是32位JRE,它无法加载64位.bat文件。

您有选择:

  • 限定.dll文件中java的路径,以便从64位Java安装中显式运行.bat

  • 将64位Java的文件夹添加到PATH的开头 这是我个人的偏好,因此我可以完全控制使用哪种Java安装(我的机器上有10多个不同的JDK版本,用于向后兼容性测试)

  • 卸载32位Java JRE (未经证实,如果可行)

  • 更改调用java.exe以加载32位版本的代码,例如从loadLibrary文件夹,如果在32位JVM中运行。请参阅&#34; How can I tell if I'm running in 64-bit JVM or 32-bit JVM&#34;。

另请参阅:Trying to use DLL from Java (JNA). Unable to load library exception