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

我有一个小的测试程序,可以在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.(Native.java:109) at testadll.TestThisDLL$PenniesLib.(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)); } } 

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

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

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