【问题标题】:Why am I getting UnsatisfiedLinkError in below program?为什么我在下面的程序中得到 UnsatisfiedLinkError?
【发布时间】:2013-02-22 16:23:17
【问题描述】:
Error is :Exception in thread "main" java.lang.UnsatisfiedLinkError: 
  jpcap.JpcapCaptor.getDeviceList()[Ljpcap/NetworkInterface;  at  
  jpcap.JpcapCaptor.getDeviceList(Native Method)  at 
  jcap.network.main(network.java:63)

import jpcap.*;
import jpcap.packet.*;
import java.io.*;
import jpcap.packet.TCPPacket.*;
import java.io.*;
import jpcap.JpcapCaptor.*;


class Network implements PacketReceiver {
    System.out.println(System.getProperty("java.library.path"));
    String sp=null;
    String dp=null;
    String window=null;
    String sequence=null;
    String acknowledge=null;
    FileWriter ff=null;
    String da=null;

    public void receivePacket(Packet pt) {
        try {
            if(pt instanceof TCPPacket) {
                TCPPacket tp=(TCPPacket)pt;
                ff=new FileWriter("da.txt",true);
                sp=new Integer(tp.src_port).toString();
                dp=new Integer(tp.dst_port).toString();
                window=new Integer(tp.window).toString();
                sequence=new Long(tp.sequence).toString();
                acknowledge=new Long(tp.ack_num).toString();
                byte[]dat=tp.data;
                da=new String(dat);
                ff.write("\r\n Source port is :-"+sp);    
                ff.write("\r\n Desination port is:-"+dp);
                ff.write("\r\n Sequence no is:-"+sequence);
                ff.write("\r\n Acknowledgement no  is:-"+acknowledge);
                ff.write("\r\n Status of rsv1 flag is:-"+tp.rsv1);
                ff.write("\r\n Status of rsv2 flag is:-"+tp.rsv2);
                ff.write("\r\n Status of Syn flag is:-"+tp.syn);
                ff.write("\r\n Status of Urg flag is:-"+tp.urg);
                ff.write("\r\n Status of Fin flag is:-"+tp.fin);
                ff.write("\r\n Data :-"+da);
                ff.write("\r\n");
                ff.write("\r\n");
                ff.close();
            }                 
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }
   }  

   public static void main(String args[])throws IOException {
        int i;        
        try {
            NetworkInterface[] devices = JpcapCaptor.getDeviceList();

            //for each network interface
            for (i = 0; i < devices.length; i++) {
                //print out its name and description
                System.out.println(i+": "+devices[i].name + "(" +    
                        devices[i].description+")"+devices[i].loopback);
                //print out its datalink name and description
                System.out.println(" datalink: "+devices[i].datalink_name + "(" 
                        + devices[i].datalink_description+")");

                //print out its MAC address
                System.out.print(" MAC address:");
                for (byte b : devices[i].mac_address)
                    System.out.print(Integer.toHexString(b&0xff) + ":");
                System.out.println();

                //print out its IP address, subnet mask and broadcast address
                for (NetworkInterfaceAddress a : devices[i].addresses)
                    System.out.println(" address:"+a.address + " " + a.subnet + " "+ 
                            a.broadcast);
            }
            JpcapCaptor captor=JpcapCaptor.openDevice(devices[0], 65535, true, 20);
            captor.loopPacket(-1,new Network());
            captor.close();
        }
        catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

【问题讨论】:

  • 一定是因为你的代码没有很好的缩进。
  • 对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。
  • 另外,尝试捕获更具体的异常,永远不要捕获(Exception e)
  • 我不想数第 63 行是哪一行。也许你可以帮助 Ram Sharma?
  • @FrancisP 奇怪的是,根据 TextPad,第 63 行是 //print out its datalink name and description。去图吧。

标签: java jpcap unsatisfiedlinkerror


【解决方案1】:

UnsatisfiedLinkError 表示 'JpcapCaptor' 本机库尚未加载,

static{
      System.loadLibrary("JpcapCaptor.dll");
}

【讨论】:

  • Francis P 第 63 行是 'NetworkInterface[] devices = JpcapCaptor.getDeviceList(); '
【解决方案2】:

UnsatisfiedLinkError 的 javadocs 非常简单。您缺少 jcap 所需的一些库。

将来,当您遇到不理解的异常时,javadocs 是一个很好的起点。

【讨论】:

    【解决方案3】:

    在您的机器上安装 jpcap,然后尝试运行您的代码。 你可以从这里下载 jpcap.exe 文件http://jpcap.software.informer.com/0.7/

    【讨论】:

      【解决方案4】:

      在完全编译和链接 Jpcap 后我遇到了同样的问题(在 Mac OS X 计算机上使用 eclipse)。原来有两个版本的 Jpcap:https://github.com/jpcap/jpcap(没有 JpCaptor)和一个带有 JpCaptor 的版本:https://github.com/mgodave/Jpcap。也许这有帮助。

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
      • @Zizouz212 - 这不是仅链接的答案。它提供了对问题的解释,并以链接作为支持证据。
      猜你喜欢
      • 1970-01-01
      • 2018-09-22
      • 2018-07-04
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2020-08-16
      • 2016-06-06
      相关资源
      最近更新 更多