PacketCapture:  loading  native  library  jpcap..  ok  
Exception  in  thread  "main"  java.lang.UnsatisfiedLinkError:  findDevice  
           at  net.sourceforge.jpcap.capture.PacketCapture.findDevice(Native  Method)  
           at  subjectprogram.CapturePacketTest.main(CapturePacketTest.java:57)  网上有人总结说:
1。unsatisfiedlinkError:dll名,那说明你没有把dll放到合适的位置,一般就和要调用原生函数的类放在一起,当然前提是你成功的生成dll了
2。unsatisfiedlinkError:方法名,这个时候你其实dll已经成功生成了,而且位置也正确,它的意思就是你没有定义那个函数,你可能会说,我明明定义了,其实当你发现问题所在,你只能自虐了,肯定是你在C文件中定义函数时有些字母大小写错了,因为其他地方是自动生成的,不会出错。尤其是直接从网上拷贝源程序时经常发生这种问题,有些作者不负责任,把有错误的程序也贴上去。但是我的JPcap是从sourceforge.net下载的官方JPcap的,相信JPcap中的类文件不会有错吧。请问这种错误除了上述那种情况外还有其它情况吗?希望有人能够提供一些建议,谢谢。

解决方案 »

  1.   

    在第一次加载该应用时,已经load了该dll,当该应用被再次热启动时,该dll将重新被加载,于是报错。
    解决方案:
    将含有JNI调用的jar包重新部署下
      

  2.   

    用了有两三年了,不记得了。
    你按照官方网站给的文档,按部就班地把使用。
    这个东西多数原因出在.dll没放在正确位置造成的。
    因为jpcap jar包的使用比普通的.jar包使用就多了一个东西--.dll文件。
      

  3.   

    本人重装winpcap3.0后正常,版本高的"据说"(网上看的,不能作为根据哟)不能与JPCAP"兼容"(此用词也不准确)
      

  4.   


     JPCAP的需求环境
    安装Java2工作平台(java2 Runtime Environment)或者SDK(http://java.sun
    .com)
    安装最新版本的LibPcap(对于UNIX平台,http://ee.lbl.gov/) 或者WinPcap (对于Windows平台,http://winpcap.polito.it/)
    下载并解压缩Jpcap的最新版本(http://netresearch.ics.uci.edu/kfujii/jpcap
    /doc/index.html )  JPCAP的安装
    (A) Windows 9x,NT,2000
    1) 复制"lib\Jpcap.dll"到"[JRE directory]\bin"或"[JRE directory]
    \lib\ext\x86"。
    2) 复制"lib\jpcap.jar"到"[JRE directory]\lib\ext"。
    3) 如果安装了SDK,还需要拷贝"lib\jpcap.jar"到"[SDK directory]
    \jre\lib\ext"。
    其中[JRE directory]是指JRE默认安装路径,一般来说是C:\Program Files\Java\j2re*;[SDK directory] 是指SDK的默认安装路径,一般来说是C:\j2sdk*。
    打开JBuilder8的工程,选"Tools/Configure JDKs/ Add"将\lib中的文件jpcap.jar加入。将\sample\tcpdump.java 加入,即可编译运行。
    注意:在Windows下,Jpcap.dll和jpcap.jar两个文件需要放置的位置与您所安装JRE中设置的"home path"有极大的联系。其中,Jpcap.dll文件必须放在您设置的"home path"的子目录中的bin文件夹中,jpcap.jar文件放的位置较为任意,一般是放到lib文件夹中,理论上可以放到任意地方,但是必须在jdk setting中加入该类库包的完整路径。
    (B) UNIX
    1) 在解压缩的Jpcap文件夹中,进入src/c目录,编辑Makefile文件,根据你安装的操作系统的类型修改编辑选项。
    2) 也许你必须修改Jpcap_sub.h文件,以使其可以支持IPV6。
    3) 运行make,产生libjpcap.so文件。如果你看到错误信息:"structure has no member name sa_len...",则在Jpcap_sub.h中屏蔽#define HAVE_SA_LEN这一行。
    4) 拷贝文件libjpcap.so到java安装目录/jre/lib/<arch>. <arch>是"i386"或"sparc"(或者设置LD_LIBRARY_PATH包括libjpcap.so存在的路径)。
    5) 拷贝文件lib/jpcap.jar到扩展目录下,比如:…/jre/lib/ext(或者设置CLASSPATH包括jpcap.jar文件)。dll还要拷贝到自己工程的lib文件夹内