[求助]关于JNI调用DLL的问题,急问

时间:2022-09-30 16:07:02
平台: Windows xp sp2
JDK: 1.6u3
背景: 做一台自助终端,该终端自带一个凭条打印机(热敏,驱动由厂家提供,libPrint.dll),由于整体项目要求,需要使用B/S结构进行开发,于是方案为使用applet通过JNI调用libNative.dll(自己根据JNI要求开发,VC++ 2008),libNative.dll通过静态引用lib的方式调用打印机驱动libPrint.dll。

情况:无论通过applet还是写控制台应用的方式,均抛出 java.lang.UnsatisfiedLinkError 错误,
applet下:
java.lang.UnsatisfiedLinkError: HotmInterface.OpenPrinter([B[B)I
at HotmInterface.OpenPrinter(Native Method)
at test.OpenPrinter(test.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...(略)

应用程序方式:
Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\test\libNative.dll: Can't find dependent libraries
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.load0(Unknown Source)
        at java.lang.Runtime.load(Unknown Source)
        at HotmInterface.<clinit>(HotmInterface.java:7)
        at testc.OpenPrinter(testc.java:19)
        at testc.main(testc.java:98)

以下是我做过的尝试,请参考:
1、所有的DLL库均复制到 C:\windows\system32 及 应用目录
2、Applet 安全权限已放开

很急很急的问题,请用力讨论啊。谢谢了啊

6 个解决方案

#1


java.lang.UnsatisfiedLinkError: D:\test\libNative.dll
明显没有找C:\windows\system32下的libNative.dll啊

#2


window环境变量PATH中加入D:\test应该可以解决你的问题,不过当然D:\test下要有libNative.dll
最好把ie关掉再测下

#3


试试把vc的dll比如msvcrt.dll之类的考到相应的文件夹下看看

#4


我对灯发誓,所有的lib dll 都在 C:\windows\system32 和应用路径了
我清空了IE的临时文件,现在两种方式都报 Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\test\libNative.dll: Can't find dependent libraries 
了。

证明java可以找到libNative.dll,如果不能找到,会报 no libNative.dll in java.library.path 

输出 java.library.path 结果如下:
C:\Program Files\Internet Explorer;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS ...(后面略)

#5


可能是缺少libNative.dll依赖的其他dll,(比如libprint.dll)
用VC里面的工具depends可以看到libNative依赖哪些dll

#6


可能是找不到java的dll。将%jre_home%/bin加入到path中。

#1


java.lang.UnsatisfiedLinkError: D:\test\libNative.dll
明显没有找C:\windows\system32下的libNative.dll啊

#2


window环境变量PATH中加入D:\test应该可以解决你的问题,不过当然D:\test下要有libNative.dll
最好把ie关掉再测下

#3


试试把vc的dll比如msvcrt.dll之类的考到相应的文件夹下看看

#4


我对灯发誓,所有的lib dll 都在 C:\windows\system32 和应用路径了
我清空了IE的临时文件,现在两种方式都报 Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\test\libNative.dll: Can't find dependent libraries 
了。

证明java可以找到libNative.dll,如果不能找到,会报 no libNative.dll in java.library.path 

输出 java.library.path 结果如下:
C:\Program Files\Internet Explorer;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS ...(后面略)

#5


可能是缺少libNative.dll依赖的其他dll,(比如libprint.dll)
用VC里面的工具depends可以看到libNative依赖哪些dll

#6


可能是找不到java的dll。将%jre_home%/bin加入到path中。