Java Swing JFrame登录成功后仍提示账号密码或用户类型错误如何解决
问题根源
- 所有
if分支均为独立判断逻辑,未做互斥处理:普通用户/员工登录成功的分支执行完成后,代码仍会继续向下执行后续的空值判断逻辑,只要当前输入的账号密码不为空,就会命中最后一个else分支弹出错误提示。 - 逻辑判断符使用错误:代码中使用的单
&是按位与运算符,应该使用&&短路逻辑与运算符,单&会强制执行两侧所有判断语句,还可能引发空指针异常。 - 登录成功分支和后续的输入校验、错误提示分支没有做互斥隔离,登录成功后没有终止后续的错误判断逻辑。
修复方案
- 把普通用户、员工的登录判断和后续的空值校验、错误提示整合成一套互斥的
if-else if-else分支,避免多个分支同时触发。 - 将所有逻辑判断场景的单
&替换为&&。 - 确保只有登录失败的场景才会进入输入校验和错误提示分支。
修正后可直接运行的代码如下:
if (userInfo != null ) { JOptionPane.showMessageDialog(null, "LoginSuccessful"); dispose(); new ChooseRoomFrame(userInfo,UserRoomDetails,UserDao).setVisible(true); } else if(Staff != null && rdbtnStaff.isSelected()){ JOptionPane.showMessageDialog(null, "Login Successful"); dispose(); new StaffFrame(userInfo, UserRoomDetails,UserDao).setVisible(true); } else { if(user.isEmpty() && pwd.isEmpty()){ JOptionPane.showMessageDialog(null,"Please insert Username and Password"); } else if(user.isEmpty()){ JOptionPane.showMessageDialog(null,"Please insert Username"); } else if (pwd.isEmpty()){ JOptionPane.showMessageDialog(null,"Please insert Password"); } else { JOptionPane.showMessageDialog(null, "Incorrect account or password or user type"); } }
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

