Java图形用户界面未知报错求解决

想问问我这个代码就是在窗口中增加组件,但是出现未知错误了,想问问怎么解决,歇歇
卓业要求的图是这个

img


这是代码:

import javax.swing.*;


class Demo6__4 extends JFrame{
    JLabel lbl1,lbl2,lbl3;//标签
    JFrame jFrame ;
    JCheckBox cb1,cb2,cb3,cb4,cb5;//单选框
    JRadioButton jrb1,jrb2,jrb3,jrb4,jrb5;//单选按钮
    JButton btn1,btn2;
    JTextField txt;

    void Display(){
        jFrame = new JFrame("个人信息调查");
        lbl1 = new JLabel("年龄段:");
        lbl2 = new JLabel("兴趣爱好:");
        lbl3 = new JLabel("调查的结果为:");
        cb1 = new JCheckBox("交友");
        cb2 = new JCheckBox("户外");
        cb3 = new JCheckBox("购物");
        cb4 = new JCheckBox("旅游");
        cb5 = new JCheckBox("其他");
        jrb1 = new JRadioButton("5~15岁");
        jrb2 = new JRadioButton("16~25岁");
        jrb3 = new JRadioButton("26~35岁");
        jrb4 = new JRadioButton("36~45岁");
        jrb5 = new JRadioButton("46~55岁");
        btn1 = new JButton("提交");
        btn1 = new JButton("清空");
        txt = new JTextField("");
        jFrame.add(lbl1);
        jFrame.add(jrb1);jFrame.add(jrb2);jFrame.add(jrb3);jFrame.add(jrb4);jFrame.add(jrb5);
        jFrame.add(lbl2);
        jFrame.add(cb1);jFrame.add(cb2);jFrame.add(cb3);jFrame.add(cb4);jFrame.add(cb5);
        jFrame.add(lbl3);
        jFrame.add(txt);
        jFrame.add(btn1);
        jFrame.add(btn2);
        add(jFrame);



        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(500,500);
        setResizable(true);
        setVisible(true);
    }

}
public class Demo6_4 {
    public static void main(String[] args) {
        new Demo6__4().Display();
    }
}

顺便想问问我这个代码有没有可以简洁的写法

我大概把你代码重构了一下,你可以作为参考

使用了更加常见的命名规范,将类名改为了“SurveyForm”,将 GUI 组件的变量名改为了小驼峰式命名法。同时,将原来的 Display() 方法分成了两个方法 initComponents() 和 setupLayout(),将 GUI 组件的创建和布局分别放置在这两个方法中,使得代码更加模块化和易读。此外,将 ButtonGroup 用来组合 JRadioButton 组件,将组件放置在不同的 JPanel 容器中,使用 BoxLayout 使得它们垂直排列,最后将这些容器放置在一个主容器中。这样,代码的结构更加清晰,易于维护。

import javax.swing.*;
 
public class SurveyForm extends JFrame {
    private JLabel ageLabel, interestLabel, resultLabel;
    private JCheckBox friendCheckbox, outdoorCheckbox, shoppingCheckbox, travelCheckbox, otherCheckbox;
    private JRadioButton ageGroup1, ageGroup2, ageGroup3, ageGroup4, ageGroup5;
    private JButton submitButton, clearButton;
    private JTextField resultTextField;
 
    public SurveyForm() {
        super("个人信息调查");
        initComponents();
        setupLayout();
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(500,500);
        setResizable(true);
        setVisible(true);
    }
    
    private void initComponents() {
        ageLabel = new JLabel("年龄段:");
        interestLabel = new JLabel("兴趣爱好:");
        resultLabel = new JLabel("调查的结果为:");
        friendCheckbox = new JCheckBox("交友");
        outdoorCheckbox = new JCheckBox("户外");
        shoppingCheckbox = new JCheckBox("购物");
        travelCheckbox = new JCheckBox("旅游");
        otherCheckbox = new JCheckBox("其他");
        ageGroup1 = new JRadioButton("5~15岁");
        ageGroup2 = new JRadioButton("16~25岁");
        ageGroup3 = new JRadioButton("26~35岁");
        ageGroup4 = new JRadioButton("36~45岁");
        ageGroup5 = new JRadioButton("46~55岁");
        submitButton = new JButton("提交");
        clearButton = new JButton("清空");
        resultTextField = new JTextField();
    }
    
    private void setupLayout() {
        ButtonGroup ageGroup = new ButtonGroup();
        ageGroup.add(ageGroup1);
        ageGroup.add(ageGroup2);
        ageGroup.add(ageGroup3);
        ageGroup.add(ageGroup4);
        ageGroup.add(ageGroup5);
        
        JPanel agePanel = new JPanel();
        agePanel.add(ageLabel);
        agePanel.add(ageGroup1);
        agePanel.add(ageGroup2);
        agePanel.add(ageGroup3);
        agePanel.add(ageGroup4);
        agePanel.add(ageGroup5);
        
        JPanel interestPanel = new JPanel();
        interestPanel.add(interestLabel);
        interestPanel.add(friendCheckbox);
        interestPanel.add(outdoorCheckbox);
        interestPanel.add(shoppingCheckbox);
        interestPanel.add(travelCheckbox);
        interestPanel.add(otherCheckbox);
        
        JPanel resultPanel = new JPanel();
        resultPanel.add(resultLabel);
        resultPanel.add(resultTextField);
        
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(submitButton);
        buttonPanel.add(clearButton);
        
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
       mainPanel.add(agePanel);
        mainPanel.add(interestPanel);
        mainPanel.add(resultPanel);
        mainPanel.add(buttonPanel);
        
        add(mainPanel);
    }
 
    public static void main(String[] args) {
        new SurveyForm();
    }
}
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7781990
  • 你也可以参考下这篇文章:编写Java程序_输入本部门五位员工的薪资,并根据用户输入的序号为指定员工进行提薪。若用户输入序号出现越界,则提示错误。
  • 同时,你还可以查看手册:java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-注释是元数据的一种形式,为编译器提供信息。本课介绍了在程序中有效使用注释的地方和方法。-声明一个注解类型 中的内容
  • 除此之外, 这篇博客: Java中接口返回参数按照请求参数进行排序中的 在开发接口的时候,有时候我们会遇到这样的场景,前端传来的参数是一个列表,我们通过这些参数在数据库中查询出一个列表,但是在数据库中查询出来的这个列表和前端传来的参数的顺序不一致。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 比方说我们的数据库中 user 表有以下几条数据:

    iduidname
    1user_003法半夏
    2user_001蜜远志
    3user_002麦冬
    4user_004茵陈

    我们需要 通过前端传来的参数 uid 列表 查询 其中的数据,然后返回给前端,但是前端传来的 uid 列表是 [“user_001”, “user_002”, “user_003” ,“user_004”] ,这时候,我们通过

    SELECT uid,`name` from user where uid 
    IN('user_001','user_002','user_003','user_004');
    

    查询出来的结果是这样的:

    iduidname
    1user_003法半夏
    2user_001蜜远志
    3user_002麦冬
    4user_004茵陈
    [
    	{"name":"法半夏","uid":"user_003"},
    	{"name":"蜜远志","uid":"user_001"},
    	{"name":"麦冬","uid":"user_002"},
    	{"name":"茵陈","uid":"user_004"}
    ]
    

    可以看到传入的参数列表和返回的列表 uid 并不是对应的。

    [
    	{"name":"蜜远志","uid":"user_001"},
    	{"name":"麦冬","uid":"user_002"},
    	{"name":"法半夏","uid":"user_003"},
    	{"name":"茵陈","uid":"user_004"}
    ]
    

    为了解决这个问题,有多种方法,比方说在mybatis 中 先 使用 foreach 入参列表 再left join user 表, 但 这样的缺点是当参数列表较长的时候sql 语句可能很长,sql 语句解析可能会比较慢,占用网络带宽可能较大,总而言之就是可能存在 bug;

    不想打字了,直接上代码
    排序工具类:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.util.CollectionUtils;
    
    import java.lang.reflect.Field;
    import java.util.*;
    
    /**
     * @author: XiaTian
     * @create-time 18:22 2021/11/14
     */
    public class OrderUtil {
        private static Logger logger = LoggerFactory.getLogger(OrderUtil.class);
    
        /**
         * 排序操作
         * @param originList 数据库中查询出来的的列表,需要排序操作
         * @param orderList 前端传来的参数列表
         * @param orderField 需要排序的字段, 如: uid
         * @param <T> 泛型
         * @return
         */
        public static <T> List<T> order(List<T> originList,
                                        List<String> orderList,
                                        final String orderField){
            if (CollectionUtils.isEmpty(originList)){
                logger.info("入参集合为空");
                return originList;
            }
            Map<String,T> tempMap = new HashMap<>();
            Field declaredField;
            List<T> rtnList = new ArrayList<>();
            try {
                declaredField = originList.get(0).getClass().getDeclaredField(orderField);
                declaredField.setAccessible(true);
                for (T ele : originList){
                    String value = declaredField.get(ele).toString();
                    tempMap.put(value,ele);
                }
                for (String code : orderList){
                    rtnList.add(tempMap.get(code));
                }
            } catch (NoSuchFieldException e) {
               logger.warn("没用指定字段[{}]",orderField);
            } catch (IllegalAccessException e) {
                logger.warn("访问字段非法,请检查字段[{}]权限",orderField);
            }
            return rtnList;
        }
    
        public static void main(String[] args) {
            List<String> orderList = Arrays.asList("user_001","user_002","user_003","user_004");
            List<User> userList = new ArrayList<>();
            userList.add(new User(1,"user_003","法半夏"));
            userList.add(new User(2,"user_001","蜜远志"));
            userList.add(new User(3,"user_002","麦冬"));
            userList.add(new User(4,"user_004","茵陈"));
            List<User> orderedUsers = OrderUtil.order(userList, orderList, "uid");
            System.out.println(orderedUsers);
        }
    }
    
    

    user 类

    package com.xhw.product.outman.util;
    
    import lombok.Data;
    
    /**
     * @author: XiaTian
     * @create-time 18:37 2021/11/14
     */
    @Data
    public class User {
        private int id;
        private String uid;
        private String name;
    
        public User(int id, String uid, String name) {
            this.id = id;
            this.uid = uid;
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", uid='" + uid + '\'' +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    
  • 您还可以看一下 汪翠老师的java项目实战之欢乐斗地主游戏开发教程 毕业项目课程设计带源码课程中的 给扑克牌绑定鼠标事件实现单击可以选择出牌列表小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我会尝试回答这个问题。

    对于Java图形用户界面中未知报错的问题,一般来说是因为代码中存在错误,例如组件添加错误、空指针异常等。解决这个问题的步骤如下:

    1. 分析错误信息与代码,找到可能出错的部分。

    2. 采用日志等调试工具,逐个排查可能出错的变量、方法、组件等,定位并修复错误,直到程序可以正常运行。

    3. 如果代码量较大或复杂,适当引入单元测试和代码重构等工作流程,提高代码质量和可维护性。

    同时,使用一些优秀的Java GUI框架也能帮助开发者更快地实现图形界面,例如Swing、JavaFX等。编写代码前,充分掌握相关框架的基础知识和API,有利于快速实现需求并降低出错率。

    以上是我对这个问题的回答。如果有不足之处,请指出。