使用实时捕获的数据包信息进行JList更新(使用jNetPcap)导致列表消隐

时间:2012-10-09 14:49:50

标签: multithreading jlist jnetpcap

我正在编写应用程序,它在两个NI卡的特定线程中同时捕获数据包。

我正在使用jnetPcap并且我在jpackethanler&#39方法中获取捕获的数据包nextPacket我需要在JList中显示来自当前数据包的信息但是当我使用defaultListModel并且我编写model1.addElement(packetinfo)然后JList随机空白。

我的代码:

new Thread(){

    @Override
    public void run(){

    StringBuilder errbuf = new StringBuilder(); // For any error msgs

    int snaplen = 64 * 1024;           // Capture all packets, no trucation  
    int flags = Pcap.MODE_PROMISCUOUS; // capture all packets  
    int timeout = 10 * 1000;           // 10 seconds in millis

    Pcap pcap1 =  
        Pcap.openLive(Variables.getDevice1().getName(), snaplen, flags, timeout, errbuf);  

    if (pcap1 == null) {  
        System.err.printf("Error while opening device for capture: "  
            + errbuf.toString());  
        return;  
    }

    PcapPacketHandler<String> jpacketHandler1 = new PcapPacketHandler<String>() {  

        int count = 1;

        @Override
        public void nextPacket(PcapPacket packet, String user) {  

            // ALL PACKETS FROM DEVICE 1 HERE
            int packetSize = packet.size();
            int packetCount = count++;

            String desc = String.format("No.: %15d | HDRSize : %-4d", packetCount,packetSize);

            device1Model.addElement(desc); // this adds desc to JLIST

        }
    };  

    pcap1.loop(Pcap.LOOP_INFINITE, jpacketHandler1, "");
    pcap1.close();

    }
}.start();

更改更顺畅,同时不会丢失数据包。因为我需要捕获每个数据包的正确功能的应用程序。

谢谢。

0 个答案:

没有答案