Java 问题“UnsatisfiedLinkError”
Posted
技术标签:
【中文标题】Java 问题“UnsatisfiedLinkError”【英文标题】:Java Problem "UnsatisfiedLinkError" 【发布时间】:2010-12-14 05:30:29 【问题描述】:我制作了一个简单的 java 程序,将字节发送到并行端口,它使用一个 .dll 和其他两个类(pPort.java 和 ioPort.java)来完成它,它工作得非常好。
但是,我开始在 NetBeans IDE 上制作另一个具有类似功能的程序。它编译得很好,但是当我运行它时,我得到:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: parallelporttimer.ioPort.Out32(SS)V
据我了解,它无法调用我放在 System32 上的 .dll 文件。但我不明白为什么,因为另一个程序基本相同,但没有任何 IDE 手动制作,运行良好。我是否必须在 NetBeans 中指定某些内容才能使其正常工作?对此的任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您是否查看过这两个程序(独立程序和 IDE)的两个类路径?
【讨论】:
【参考方案2】:DLL 需要位于路径或当前工作目录中才能加载。
我猜当您在没有 IDE 的情况下运行程序时是后者。当您从 NetBeans 中运行它时,“工作”目录可能是 netbeans/bin
文件夹,因此无法找到 DLL。将其位置添加到路径中,您应该可以开始了。
【讨论】:
【参考方案3】:我不使用 Netbeans,但听起来 Netbeans 维护自己的 java.library.path
。您可以尝试的最好的方法是自己将其指定为 VM 参数:
-Djava.library.path="c:/path/to/dll/files"
【讨论】:
【参考方案4】:UnsatisfiedLinkError
消息通常表示已设置库路径,但不包括您尝试加载的库。在 Windows 平台上,您应该使用
PATH
PATH = %PATH%;C:\path_to_dll_file
在 UNIX 平台上,您应该使用
扩展库路径setenv LD_LIBRARY_PATH mylibrarypath
但是,据我所知(我不在 Windows 下),System32
在 PATH
中,所以我怀疑 NetBeans 会通过设置自己的 PATH 来覆盖它。
要在 NetBeans 上解决此问题,您可能需要查看 this message 中提到的 http://wiki.netbeans.org/DevFaqNativeLibraries,来自 NetBeans 梦之队成员 Wade Chandler ;-)
PS:您也可以使用java.library.path
系统属性,但请记住,此系统属性仅适用于解析您在代码中加载的直接本机库。其他依赖库的加载留给第一个库。您加载的 JNI 库将依赖于操作系统相关的方式来解析其引用(这也适用于 IMO 的常见问题解答的解决方案,所以我仍然不能 100% 相信它是一个好的解决方案)。
【讨论】:
【参考方案5】:在我的情况下,原因不是缺少库,而是使用 64 位 Java JDK 作为 Netbeans 的默认 Java 平台。
(添加“-d32”标志没有帮助。)
问题已通过以下方式解决:
-
将 32 位 Java 平台添加到 Netbeans(菜单:工具/Java 平台)和
将其指定为项目的平台(项目属性/库/Java 平台)。
【讨论】:
以上是关于Java 问题“UnsatisfiedLinkError”的主要内容,如果未能解决你的问题,请参考以下文章