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

Java Swing中JOptionPane取消后转BigDecimal报NullPointerException求助

问题原因
  • 核心触发点:JOptionPane.showInputDialog 方法在用户点击取消按钮、直接关闭弹窗时返回null,你直接将该null值传入BigDecimal构造方法,直接触发空指针异常
  • 次要逻辑错误:你后续的判断逻辑完全无效,BigDecimal类型的变量不可能和字符串""相等,且判断顺序颠倒,应该先校验输入值再转换为BigDecimal
修复方案

直接替换jButton1ActionPerformed方法的代码即可,修复版代码如下:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // 先接收原始输入字符串,不直接转类型
    String inputStr = JOptionPane.showInputDialog(null,"Enter Quantity", 0);
    // 优先判断用户是否点了取消/输入为空
    if (inputStr == null || inputStr.trim().isEmpty()) {
        JOptionPane.showMessageDialog(null, "Calculation Cancelled");
        return; // 终止后续逻辑避免报错
    }
    BigDecimal quantity;
    try {
        // 输入合法后再转换为BigDecimal,同时捕获非数字输入的异常
        quantity = new BigDecimal(inputStr.trim());
    } catch (NumberFormatException e) {
        JOptionPane.showMessageDialog(null, "请输入合法的数值!");
        return;
    }
    // 原有计算逻辑保持不变
    DefaultTableModel model1 = (DefaultTableModel) jTable1.getModel();
    for (int i = 0; i < model1.getRowCount(); i++) {
        Object data1 = jTable1.getValueAt(i, 0);
        Object data2 = jTable1.getValueAt(i, 1);
        Object data3 = jTable1.getValueAt(i, 2);
        BigDecimal data4 = new BigDecimal(jTable1.getValueAt(i, 3).toString());
        BigDecimal data5 = new BigDecimal(jTable1.getValueAt(i, 4).toString());
        BigDecimal data6 = quantity.multiply(new BigDecimal(jTable1.getValueAt(i,5).toString()));
        data6 = data6.setScale(2, BigDecimal.ROUND_HALF_UP);
        BigDecimal data7 = data4.multiply(data5.multiply(data6));
        data7 = data7.setScale(2, BigDecimal.ROUND_HALF_UP);
        Object[] row = {data1, data2, data3, data4, data5, data6, data7};
        DefaultTableModel model2 = (DefaultTableModel) jTable2.getModel();
        model2.addRow(row);
    }
}
额外优化说明

额外增加了数字格式校验逻辑,避免用户输入字母、符号等非数值内容时程序崩溃,同时删除了原有代码中冗余的String强转逻辑,toString()已经可以拿到正确的字符串值。

内容的提问来源于stack exchange,提问作者tharinduhd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:57:02