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

JForm中If Else判断与Exception异常抛出逻辑错误修复

Java Swing员工搜索功能合法ID仍抛异常修复方案

问题根因

代码存在两处核心逻辑错误,直接导致无论输入什么内容都会触发异常:

  • 核心校验方法isCodeValid判断逻辑完全写反:当传入id为"1"时,第一个if判断!id.equals("1")不成立,会进入else if分支判断!id.equals("2")——"1"本身就不等于"2",必然触发异常抛出;如果传入id不是"1",第一个if就会直接抛异常,等于任何输入值都会走到异常分支。
  • 搜索按钮点击事件完全没有使用用户输入内容:虽然代码从输入框拿到了String id = staffID.getText(),但调用isCodeValid时硬编码传入了固定值"1"和"2",用户实际输入的内容根本没参与校验和匹配流程。
  • 额外隐患:抛出IdNotFoundException时没有传入异常提示信息,最终报错弹窗会显示空白,用户无法感知具体报错原因。

修复步骤

1. 重写ID合法性校验方法

正确逻辑为:仅当输入ID既不是"1"也不是"2"时才抛出异常,合法ID直接返回校验通过结果,同时给异常绑定明确提示文案。
修复后代码:

// 校验员工ID是否在合法范围内
public static boolean isCodeValid(String id) throws IdNotFoundException {
    // ID不在合法值列表时才抛出异常
    if (!"1".equals(id) && !"2".equals(id)) {
        throw new IdNotFoundException("输入的员工ID不存在,请输入1或2");
    }
    return true;
}

注意:字符串equals判断建议把常量放前,即"1".equals(id)的写法,可以避免id为null时触发空指针异常。

2. 修复搜索按钮点击事件逻辑

去掉硬编码传参的写法,先拿用户输入的ID做统一校验,校验通过后再根据ID值匹配对应的员工详情数据。
修复后代码:

private void searchActionPerformed(java.awt.event.ActionEvent evt) {                                       
    // 获取用户输入,同时去掉前后误输入的空格
    String id = staffID.getText().trim();

    try{
        // 先统一做ID合法性校验
        isCodeValid(id);
        EmployeeDetails emp = new EmployeeDetails();
        // 校验通过后根据ID匹配对应员工信息
        if("1".equals(id)){
            emp.name.setText("Sky Peach");
            emp.email.setText("skypeach@gmail.com");
            emp.address.setText("Pangsapuri Sri Puteri");
            emp.phoneNo.setText("1999999999");
            emp.department.setText("IT");
            emp.designation.setText("Software Developer");
        }else if("2".equals(id)){
            emp.name.setText("Sky Orange");
            emp.email.setText("skyorange@gmail.com");
            emp.address.setText("Pangsapuri Sri Puteri");
            emp.phoneNo.setText("2999999999");
            emp.department.setText("IT");
            emp.designation.setText("Software Engineer");
        }
        // 展示详情页,不要用已废弃的show()方法
        emp.setVisible(true);
        this.dispose(); // 可选操作:关闭当前搜索页面
    }catch (IdNotFoundException ex) {
        JOptionPane.showMessageDialog(this, ex.getMessage());
    }
}   

3. 补全自定义异常的构造方法

确认IdNotFoundException类实现了带字符串参数的构造方法,否则异常提示信息无法正常传递:

public class IdNotFoundException extends Exception {
    public IdNotFoundException(String errorMsg) {
        super(errorMsg);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:48:13