我的应用程序加载本机库(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)
...
我错过了什么?
答案 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