我有一个小测试程序,可以在 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));
}
}
显然,您已将 JNA 的类与您自己的 jar 文件合并,但忽略了其本机支持。确保这件事all原始文件jna.jar
(不仅仅是类文件)被复制到新的目标,并且保留它们的原始路径。
具体来说,你的 jar 文件must包括 com/sun/jna/win32-x86/jnidispatch.dll。如果要包含对其他平台的支持,则必须包含 com/sun/jna/*/jnidispatch以及。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)