Как отобразить данные в формате jpcap в JTable?

Как отобразить данные в Jtable. Я получил следующий код для отображения захваченных пакетов jpcap в JTable. Но это не сработало.

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import net.sourceforge.jpcap.capture.PacketCapture;
import net.sourceforge.jpcap.capture.PacketListener;
import net.sourceforge.jpcap.net.ARPPacket;
import net.sourceforge.jpcap.net.ICMPPacket;
import net.sourceforge.jpcap.net.IPPacket;
import net.sourceforge.jpcap.net.Packet;
import net.sourceforge.jpcap.net.TCPPacket;
import net.sourceforge.jpcap.net.UDPPacket;

public class NetworkStatistics implements PacketListener{

public JFrame frmNmcidsNetworkStatistics;
private Vector<String> row;
    private Vector<Vector> rowData;
    private Vector<String> columnNames;
    private DefaultTableModel DFMO;
    private JTable table;
    private JScrollPane scrollPane;
    private PacketCapture captureobj;
private String filter = "";
private int totalpackets = -1;

private static int counter = 0;

/*
 * Create the application.
*/
public NetworkStatistics() {
    initialize();
}

/*
 * Initialize the contents of the frame.
*/
private void initialize() {
    frmNmcidsNetworkStatistics = new JFrame();
    frmNmcidsNetworkStatistics.setTitle("NMCIDS: Network Statistics");
    frmNmcidsNetworkStatistics.setBounds(100, 100, 450, 300);
    frmNmcidsNetworkStatistics.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    row = new Vector<String>();
        rowData = new Vector<Vector>();

        columnNames = new Vector<String>();
        columnNames.addElement("Sr. No");
        columnNames.addElement("Source IP");
        columnNames.addElement("Source MAC");
        columnNames.addElement("Destination IP");
        columnNames.addElement("Destination MAC");
        columnNames.addElement("Protocol");

        DFMO = new DefaultTableModel(rowData, columnNames);
        table = new JTable(DFMO);
        scrollPane = new JScrollPane(table);
        frmNmcidsNetworkStatistics.getContentPane().add(scrollPane, BorderLayout.NORTH);

}

public void GetNetworkPackets(String capdev){
    try{
        captureobj = new PacketCapture();
        captureobj.open(capdev, true);
        captureobj.setFilter(filter, true);
        captureobj.addPacketListener(this);
        captureobj.capture(totalpackets);
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

public void dispalyPacketsTable(int srno, String sip, String smac, String dip, String dmac, String proto){
    row.addElement(""+srno);
        row.addElement(sip);
        row.addElement(smac);
        row.addElement(dip);
        row.addElement(dmac);
        row.addElement(proto);
        rowData.addElement(row);
        DFMO.fireTableDataChanged();
}

@Override
public void packetArrived(Packet pdata) {
     counter++;
     printdata(pdata);
}

public void printdata(Packet pdata){
    if(pdata instanceof TCPPacket){
            TCPPacket TCPO = (TCPPacket) pdata;
            dispalyPacketsTable(counter, TCPO.getSourceAddress(), TCPO.getSourceHwAddress(), TCPO.getDestinationAddress(), TCPO.getDestinationHwAddress(), "TCP");
        }
}
}

Программа зависает, когда я запускаю этот код. Но когда я хочу отобразить захваченные данные пакета в командной строке, он отображается правильно. Пожалуйста, помогите мне выйти из этого. Заранее спасибо.

1 ответ

Решение

Программа зависает, когда я запускаю этот код

Возможно, потому что ваш код работает на Event Dispatch Thread(EDT) что мешает GUI реагировать на события.

Ваш прослушиватель пакетов должен работать в отдельном потоке, чтобы вы не блокировали EDT. Прочитайте раздел учебника Swing по параллелизму в Swing. Я думаю, вы должны использовать SwingWorker и вы можете publish результаты по мере их появления.

Другие вопросы по тегам