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中的类文件不会有错吧。请问这种错误除了上述那种情况外还有其它情况吗?希望有人能够提供一些建议,谢谢。
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中的类文件不会有错吧。请问这种错误除了上述那种情况外还有其它情况吗?希望有人能够提供一些建议,谢谢。
解决方案:
将含有JNI调用的jar包重新部署下
你按照官方网站给的文档,按部就班地把使用。
这个东西多数原因出在.dll没放在正确位置造成的。
因为jpcap jar包的使用比普通的.jar包使用就多了一个东西--.dll文件。
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文件夹内