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
相关产品推荐
相关产品推荐

