java.lang.UnsatisfiedLinkError 错误
前因:在我的项目中调用到设备,使用厂家提供的sdk中有dll文件调用,在项目中引用dll文件提示了异常,奇怪的是如果把dll直接copy放在resources下可以获取到,放到目录下就认不到了。
结构目录:
java.lang.UnsatisfiedLinkError 错误
java.lang.ExceptionInInitializerError通常发生在类初始化的过程中,当静态初始化块(static initializer block)或静态初始化器(static initializer)抛出了异常时。在这个场景中,异常是由java.lang.UnsatisfiedLinkError引起的,这表明Java虚拟机(JVM)在尝试加载本地库CVRClientAPI时失败了。
UnsatisfiedLinkError通常有以下几个可能的原因:
本地库文件不存在:确保xxx.dll文件确实存在于预期的路径中,即win32-amd64目录下。
路径问题:JVM可能没有正确地搜索到本地库的路径。你可以通过设置java.library.path系统属性来指定库的路径,或者在启动JVM时通过命令行参数来设定。
解决方式一
//设置你的dll目录
System.setProperty("java.library.path", "path/to/your/library/directory");
解决方式二
//启动程序时添加运行参数 设置你的dll目录
-Djava.library.path=path/to/your/library/directory
这个坑不知道是为啥 。可能是 Native.load(getLibraryName(), API.class); 加载的路径只能认到class下。不能加多一层目录
完美运行,打包也要注意dll文件的位置!!!