import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
import jpcap.PacketReceiver;
import jpcap.packet.EthernetPacket;
import jpcap.packet.Packet;
import jpcap.packet.TCPPacket;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
public class Tcpflowstatistics{
private static Tcpflowstatistics ts;
private boolean flag=true;
JFrame jf;
JButton bt1,bt2;
static JTextArea jta;
JScrollPane jsp;
JPanel jp1;
Tcpflowstatistics(){
jf=new JFrame("TCP流量统计器");
jf.setLayout(new BorderLayout());
jf.setVisible(true);
jf.setSize(800,600);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jta=new JTextArea();
jta.setVisible(true);
jp1=new JPanel();
jsp=new JScrollPane();
bt1=new JButton("开始");
bt2=new JButton("终止");
bt1.setBounds(20, 50, 100, 30);
bt2.setBounds(20, 50, 100, 30);
jsp.setViewportView(jta);
jp1.add(bt1);
jp1.add(bt2);
jp1.setVisible(true);
jf.add(jp1,BorderLayout.NORTH);
jf.add(jsp,BorderLayout.CENTER);
bt1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
bt1Action(e);
}
});
bt2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
bt2Action(e);
}
});
}
public static void main(String[] args) {
new Tcpflowstatistics();
}
public void init(){
final jpcap.NetworkInterface[] devices= JpcapCaptor.getDeviceList();
for (int i=0;i<devices.length;i++){
NetworkInterface ni=devices[i];
if (ni.addresses.length>0){
String addr=ni.addresses[0].address.toString();
try{
JpcapCaptor jpcap=JpcapCaptor.openDevice(ni,2000,true,20);
LoopPacketThread ipt=new LoopPacketThread(jpcap,addr);
ipt.start();
jta.append(addr+"上的采集线程已启动!!!"+"\n");
}catch (IOException e){
e.printStackTrace();
System.out.println("抓取数据包出现异常!!!");
}
}
}
}
public void bt1Action(ActionEvent e){
init();
}
public void bt2Action(ActionEvent e){
System.exit(0);
}
}
class LoopPacketThread extends Thread {
private JpcapCaptor jpcap = null;
private String ipAddr = "";
public LoopPacketThread(JpcapCaptor jpcap, String ipAddr) {
this.jpcap = jpcap;
this.ipAddr = ipAddr;
}
public void run() {
this.jpcap.loopPacket(-1, new ReceivePacket(this.ipAddr));
}
}
class ReceivePacket implements PacketReceiver{
private String ipAddr="";
public ReceivePacket(String ipAddr){
this.ipAddr=ipAddr;
}
public void receivePacket(Packet packet){
if (packet instanceof jpcap.packet.TCPPacket){
TCPPacket tcp=(TCPPacket)packet;
EthernetPacket ethernetPacket=(EthernetPacket)packet.datalink;
Tcpflowstatistics.jta.append("=============================================================="+"\n");
Tcpflowstatistics.jta.append("TCPPacket"+"\n");
Tcpflowstatistics.jta.append("此数据包的源IP地址:"+tcp.src_ip+"\n");
Tcpflowstatistics.jta.append("此数据包的目的IP地址:"+tcp.dst_ip+"\n");
Tcpflowstatistics.jta.append("此数据包的发送端口号:"+tcp.src_port+"\n");
Tcpflowstatistics.jta.append("此数据包的接收端口号:"+tcp.dst_port+"\n");
Tcpflowstatistics.jta.append("---*此数据包的源MAC地址:"+ethernetPacket.getSourceAddress()+"\n");
Tcpflowstatistics.jta.append("---*此数据包的目的MAC地址:"+ethernetPacket.getDestinationAddress()+"\n");
Tcpflowstatistics.jta.append("---*此数据包的传输层协议类型:"+tcp.protocol+"(TCP)"+"\n");
Tcpflowstatistics.jta.append("此数据包的长度:"+tcp.len+"\n");
}
}
}为什么设置的按钮和文本区都不显示?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- CSDN专家-sinJack 2021-06-13 11:01关注
没有设置组件的大小。要设置了之后才会显示的。
//方法1: 通过setBounds 来设置位置和大小
JButton jb1 = new JButton("按钮1");
jb1.setBounds(20, 50, 100, 30);
// 20,50 代表左顶点的位置,距离窗口左边20像素,距离窗口上边50像素
//100,30 代表组件的长100像素, 高30像素
add(jb1);
可以参考:https://blog.csdn.net/weixin_39624332/article/details/114251853注意:窗体的可见性是针对面板而言的,你没设置的话,窗体度看不到,你的问题只是组件没显示。
如有帮助,望采纳。点击我回答右上角的【采纳】按钮。
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用 1