线程“main”中的异常java.lang.UnsatisfiedLinkError:资源路径中找不到jnidispatch(/ com / sun /jna/win32-x86/jnidispatch.dll)

时间:2013-06-27 14:51:32

标签: java jar jna

我有一个小型测试程序,可以在JBuilder 6调试器中完美运行。当我创建.jar文件并运行它时,我收到错误

>java -jar testadll.jar
Start of DLL test
Exception in thread "main" java.lang.UnsatisfiedLinkError: jnidispatch (/com/sun
/jna/win32-x86/jnidispatch.dll) not found in resource path
    at com.sun.jna.Native.loadNativeLibraryFromJar(Native.java:708)
    at com.sun.jna.Native.loadNativeLibrary(Native.java:685)
    at com.sun.jna.Native.<clinit>(Native.java:109)
    at testadll.TestThisDLL$PenniesLib.<clinit>(TestThisDLL.java:24)
    at testadll.TestThisDLL.main(TestThisDLL.java:33)

我搜索了我的驱动器,上面没有jnidispatch.dll。

该计划

package testadll;

import com.sun.jna.Library;
import com.sun.jna.Native;
//import com.sun.jna.NativeLong;
import com.sun.jna.Platform;
import com.sun.jna.win32.StdCallLibrary;
//import com.sun.jna.*;



public class TestThisDLL {
   public interface PenniesLib extends StdCallLibrary {
    PenniesLib INSTANCE = (PenniesLib) Native.loadLibrary(
            "PenniesLib", PenniesLib.class);
        int a();
    }

  public static void main( String args[] ) {
      System.out.println("Start of DLL test");
      //TestDLL t = new TestDLL();
      //System.out.println("DLL loaded");
      int value = PenniesLib.INSTANCE.a();
      System.out.println("DLL response is " + String.valueOf(value));
  }
}

2 个答案:

答案 0 :(得分:4)

您显然已将JNA的类与您自己的jar文件合并,但省略了其原生支持。确保将原始jna.jar(不仅仅是类文件)中的所有文件复制到新目标,并保留其原始路径。

具体来说,您的jar文件必须包含com / sun / jna / win32-x86 / jnidispatch.dll。如果您想包含对其他平台的支持,您还必须包括com / sun / jna / * / jnidispatch

答案 1 :(得分:0)

例如,您应该使用支持64位的jna.jar版本 jna-4.1.0.jar或jna-3.4.0.jar。