3

我在运行程序时安装了 jpcap 库,但出现此错误。我确定添加jpcap.jarjpcap.dll纠正目录,但我不知道是什么问题!有谁知道错误是什么?

 Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\Java\jre7\bin\jpcap.dll: Can't find dependent libraries
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(Unknown Source)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at jpcap.JpcapCaptor.<clinit>(JpcapCaptor.java:251)
    at EWMAStableIP.getNumOfNewIPs(EWMAStableIP.java:106)
    at EWMAStableIP.initial(EWMAStableIP.java:343)
    at Frame.initialize(Frame.java:78)
    at Frame.<init>(Frame.java:52)
    at Frame$1.run(Frame.java:39)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
4

2 回答 2

2

当您使用 Linux 上的 .so 或 Windows 上的 .dll 加载本机库时,System.loadLibrary()它会在 PATH 环境变量和 java.libarary.path 系统属性中查找那些共享库,如果找不到共享库,则会抛出"Exception in thread "main" java.lang.UnsatisfiedLinkError: no in java.library.path". 现在的窍门是,在 Windows 中,它从 System32 文件夹中获取 dll,并且大多数时候 System32 在路径中退出,所以我们通常不会遇到这个问题。无论如何,如果您反复收到此错误,则可以尝试以下步骤,这可能会帮助您解决 java 应用程序中的 java.lang.UnsatisfiedLinkError。

尝试按照以下步骤操作:

1) 检查您的 PATH for Java 是否包含所需的 dll。

2) 验证您的 java.library.path,以防您已将其设置为所需的 dll。

3) 使用命令运行您的 java 应用程序:java -Djava.library.path= "your dll path"

4) 尝试指定库的基本名称并使用 ("name) 加载库System.loadLibaray,其中名称没有 dll。

5) Linux 从 LD_LIBRARY_PATH 加载动态链接库(.so),因此您可能希望将共享库目录包含在 LD_LIBRARY_PATH 中,例如

6)通过提供绝对路径来加载库,如"C:/WINNT/system32/digest.dll"

export LD_LIBRARY_PATH=/shared library (.so)

要点是 JVM 应该找到您的 dll 并使用 -D 提供明确的路径java.library.path总是对我有帮助。

使用系统相关库时需要注意的其他一些要点:

1)它们使java代码平台依赖。

2)System.loadLibrary()等价于Runtime.getRuntime.loadLibary()

3) 在静态初始化块中加载 System.loadLibary(libary) 以便仅在加载包含类时才加载它,并避免重新加载它。

另一个值得注意的点是 java.lang.UnsatisfiedLinkError 抛出的实际错误消息:

如果它显示 "Exception in thread "main" java.lang.UnsatisfiedLinkError: no dll in java.library.path" 意味着 JVM 无法定位和加载库。

如果它显示线程,"main" java.lang.UnsatisfiedLinkError: com......'即打印类或方法名称,则库本身可能有问题,例如一半复制的 dll。

有时您可能还会得到

Exception in thread "main" java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: digest.dll
        at java.lang.Runtime.load0(Runtime.java:767)
        at java.lang.System.load(System.java:1003)

要解决这个问题,只需提供库的绝对路径就可以了。

这就是如何解决的全部内容 Exception in thread "main" java.lang.UnsatisfiedLinkError: no dll in java.library.path",如果您以前遇到过这个 java.lang.UnsatisfiedLinkError,请分享您的经验。

参考这里

于 2013-04-16T14:00:30.770 回答
0

可能您在 32 位 wincap 上运行 64 位 jpcap .. 请重新安装 wincap 并确保 jpcap 和 wincap 都具有与 jdk 相同的“位”。

于 2015-01-03T12:18:48.180 回答