Java开发Swing计算器时del和clr按钮不显示且报空指针异常
Java计算器代码问题排查与修复
空指针异常原因
你声明的functionButtons数组长度为9,但仅为索引0~7的8个元素完成了初始化赋值,剩余索引8的元素为null。后续循环逻辑为遍历i < 9,执行到functionButtons[8].addActionListener(this)时就会触发空指针异常,对应报错的第69行代码。
修复方式二选一:
- 调整数组长度为8:将
JButton[] functionButtons = new JButton[9];改为JButton[] functionButtons = new JButton[8];,同时将循环条件改为for (int i = 0; i < 8; i++) - 补全索引8的元素赋值:如果后续还要加第9个功能按钮,先给
functionButtons[8]完成初始化再执行循环
按钮不显示问题原因
你代码中存在多处布局逻辑冲突:
- 你给JFrame设置了
setLayout(null)绝对布局,但添加按钮时传入了BorderLayout.SOUTH参数,该参数仅在BorderLayout布局下生效,绝对布局下直接添加组件即可,不需要传布局参数 - del和clr按钮的
setBounds参数完全相同,两个按钮完全重叠,后添加的clr按钮会覆盖del按钮 - 你在设置
setSize之后调用了frame.pack(),该方法会根据组件首选大小自动重置窗口尺寸,会覆盖你设置的420*550的窗口大小,导致组件显示异常
修复后的核心代码片段
// 修改功能按钮数组长度为8 JButton[] functionButtons = new JButton[8]; // 循环遍历范围改为8 for (int i = 0; i < 8; i++) { functionButtons[i].addActionListener(this); functionButtons[i].setFont(myFont); functionButtons[i].setFocusable(false); } // 删除frame.pack()调用,或移到所有组件添加完成之后执行 // frame.pack(); // 调整两个按钮的位置,避免重叠,去掉add方法的布局参数 delButton.setBounds(50,430,145,50); clrButton.setBounds(205,430,145,50); frame.add(delButton); frame.add(clrButton); frame.add(textField);
修改完成后重新运行即可正常显示两个按钮,且不会抛出空指针异常。
内容的提问来源于stack exchange,提问作者clara
相关产品推荐
相关产品推荐

