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

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

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条)

报告相同问题?

悬赏问题

  • ¥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应用,多线程