如何使用带有参数Pcap.LOOP_INFINITE的pcap.loop()将捕获的数据包打印到JTextArea中?

时间:2013-02-21 10:58:22

标签: java swing pcap libpcap jnetpcap

我对JNetPcap很新,而且我仍在寻找解决方案,我正在尝试为我的项目构建一个数据包嗅探器,最近我正在尝试将打印输出数据包信息转换为{ {1}}通过附加我正在使用的JTextArea的信息,但是当我使用特定的整数值设置第一个参数时,假设5 pcap.loop()输出已捕获的5个数据包,现在我想要的是连续捕获和输出数据包,直到我按下按钮停止。下面的语法显示了数据包处理程序。

pcap.loop()

现在这一点是我的pcktTextArea,我使用PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() { public void nextPacket(PcapPacket packet, String user) { // System.out.printf is included to check if my code works in a non GUI fashion System.out.printf("Received packet at %s caplen=%-4d len=%-4d %s\n", new Date(packet.getCaptureHeader().timestampInMillis()), packet.getCaptureHeader().caplen(), // Length actually captured packet.getCaptureHeader().wirelen(), // Original length user // User supplied object ); Date a = new Date(packet.getCaptureHeader().timestampInMillis()); int b = packet.getCaptureHeader().caplen(); int c = packet.getCaptureHeader().wirelen(); String d = user; pcktTextArea.append("Received packet at " + a + " caplen=" + Integer.toString(b) + " len=" + Integer.toString(b) + user + "\n" ); pcktTextArea.setForeground(Color.red); pcktTextArea.setFont(font); } }; 打印出textarea中的信息:

append

最后我遇到麻烦的 pcktTextArea.append("Received packet at " + a + " caplen=" + Integer.toString(b) + " len=" + Integer.toString(b) + user + "\n" ); pcktTextArea.setForeground(Color.red); pcktTextArea.setFont(font); ,如果我替换我,我会说它确实打印在Pcap.loop但是当我只放JTextArea时通过控制台打印信息,但不在GUI JTextArea中打印:

Pcap.LOOP_INFINTE

是不是因为在Textarea中输出信息之前必须完成循环?

1 个答案:

答案 0 :(得分:1)

我假设你在一个线程中运行代码。使用 SwingUtilities.invokeAndWait来调用pcktTextArea.append()代码