平台: 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 安全权限已放开很急很急的问题,请用力讨论啊。谢谢了啊

解决方案 »

  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中。