sinkniess
2021-06-13 11:00
采纳率: 100%
浏览 49
已结题

为什么设置的按钮和文本区都不显示?

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");
        }
    }
}
  • 点赞
  • 收藏

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 打赏 评论
  • CSDN专家-张老师 2021-06-13 11:01

    你没有设置可见性

    点赞 打赏 评论

相关推荐 更多相似问题