我对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中输出信息之前必须完成循环?
答案 0 :(得分:1)
我假设你在一个线程中运行代码。使用
SwingUtilities.invokeAndWait
来调用pcktTextArea.append()
代码