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
悬赏问题
- ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
- ¥15 gdf格式的脑电数据如何处理matlab
- ¥20 重新写的代码替换了之后运行hbuliderx就这样了
- ¥100 监控抖音用户作品更新可以微信公众号提醒
- ¥15 UE5 如何可以不渲染HDRIBackdrop背景
- ¥70 2048小游戏毕设项目
- ¥20 mysql架构,按照姓名分表
- ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
- ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
- ¥15 linux驱动,linux应用,多线程