You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:15:07