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

如何实现输入无效时用JOptionPane显示错误提示的Java程序?

解决方案:Java Swing 输入校验与分步输入实现

咱们先来梳理下你现有代码的问题:直接调用Double.parseDouble()如果遇到非数字输入会抛出异常,而且没有处理用户点击取消、输入为空的情况,自然没法实现「无效输入弹警告、有效才进下一步」的需求。

下面我给你提供一套完整的实现方案,核心思路是对每个输入项做循环校验,直到用户输入有效内容才进入下一个输入框:

import javax.swing.JOptionPane;

public class JoptionInputDialogBisa {
    public static void main(String[] args) {
        JOptionPane jop = new JOptionPane();
        String nama = null;
        double tb = 0.0;

        // 第一步:获取并校验姓名输入
        do {
            nama = JOptionPane.showInputDialog(null, "Masukkan Nama : ");
            // 处理用户取消输入的情况
            if (nama == null) {
                JOptionPane.showMessageDialog(null, "操作已取消", "提示", JOptionPane.INFORMATION_MESSAGE);
                return; // 直接退出程序
            }
            // 校验是否为空或仅空格
            if (nama.trim().isEmpty()) {
                JOptionPane.showMessageDialog(null, "Nama tidak boleh kosong!", "Error", JOptionPane.ERROR_MESSAGE);
            }
        } while (nama.trim().isEmpty()); // 输入无效就重复弹出输入框

        // 第二步:获取并校验身高输入
        boolean isValidTb = false;
        do {
            String tbInput = JOptionPane.showInputDialog(null, "Masukkan Tinggi Badan (cm) : ");
            // 处理用户取消输入的情况
            if (tbInput == null) {
                JOptionPane.showMessageDialog(null, "操作已取消", "提示", JOptionPane.INFORMATION_MESSAGE);
                return;
            }
            try {
                tb = Double.parseDouble(tbInput);
                // 额外校验身高的合理性(比如大于0)
                if (tb <= 0) {
                    JOptionPane.showMessageDialog(null, "Tinggi badan harus lebih besar dari 0!", "Error", JOptionPane.ERROR_MESSAGE);
                } else {
                    isValidTb = true; // 输入有效,退出循环
                }
            } catch (NumberFormatException e) {
                // 捕获非数字输入的异常
                JOptionPane.showMessageDialog(null, "Tinggi badan harus berupa angka!", "Error", JOptionPane.ERROR_MESSAGE);
            }
        } while (!isValidTb);

        // 计算并展示结果
        double bbi = (tb - 100) * 0.9;
        String cetak = String.format("Nama: %s\nTinggi Badan: %.1f cm\nBBI Ideal: %.1f kg", nama, tb, bbi);
        JOptionPane.showMessageDialog(null, cetak, "Hasil Perhitungan BBI", JOptionPane.INFORMATION_MESSAGE);
    }
}

关键细节说明:

  • 循环校验逻辑:用do-while循环确保用户必须输入有效内容才能进入下一步,避免无效输入直接导致程序崩溃
  • 空输入处理:校验姓名是否为空或仅空格,身高输入为空时也会触发异常捕获
  • 异常捕获:用try-catch处理NumberFormatException,当用户输入非数字内容时弹出明确的错误提示
  • 取消操作处理:如果用户点击输入框的取消按钮(返回null),会弹出提示并退出程序,避免后续代码报错
  • 合理性校验:额外添加了身高必须大于0的校验,让输入逻辑更严谨

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:06:21