jpcap安装错误

时间:2013-04-16 13:41:30

标签: java jpcap

我运行程序时安装了jpcap库我遇到了这个错误。我确信将jpcap.jarjpcap.dll添加到正确的目录中,但我不知道是什么问题! 谁知道什么是erorr?

 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)

2 个答案:

答案 0 :(得分:2)

当您使用System.loadLibrary()在Windows上加载.so或Linux上的.dll等本机库时,它会在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)尝试使用System.loadLibaray(“name”)指定库的基本名称并加载库,其中name不带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)在静态initalizer块中加载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,请分享您的经验。

提到here

答案 1 :(得分:0)

可能你在32位wincap上运行64位jpcap .. 请重新安装wincap,并确保jpcap和wincap都具有相同的位[&#39;用jdk。