即使用户名和密码正确,在进入下一帧之前也会显示错误消息。 (JAVA)

Error message is displayed before going to next frame even though username and password is correct. (JAVA)

这是我的 txt 文件。

bk 456
bg 123
ll 222
pp 333

这是我的代码。

    String m_uname = ManagerID.getText();
    String m_pw = managerpw.getText();

    try
    {
        BufferedReader br = new BufferedReader(new FileReader("C:\Users\L\Desktop\NewAssignmentOODJ\textfile\ManagerLoginDetails.txt"));
        String reader;
        boolean login = false;

        while ((reader = br.readLine())!=null)
        {
            String[] split = reader.split(" ");
            if (m_uname.equals(split[0]) && m_pw.equals(split[1]))
            {
                login = true;
                ManagerForm mform = new ManagerForm();
                mform.setVisible(true);
                this.setVisible(false);
                break;
            }

            else
            {
                JOptionPane.showMessageDialog(null,"Whoops!","Error",JOptionPane.ERROR_MESSAGE);
            }
        }
     }

    catch (Exception e)
    {
        JOptionPane.showMessageDialog(null,"Invalid Login Details","Login Error",JOptionPane.ERROR_MESSAGE);
    }

登录功能有效,但它会在移动到下一个 jframe 表单之前显示错误消息。例如。如果我输入 pp 和 333,错误消息会显示 3 次,然后才会移动到下一帧。

第一组用户名和密码没问题。

您应该只在循环执行完毕后显示登录错误。它显示错误三次,因为它在检查下一对之前检查每一对,所以当你输入 "pp" 和“333”时,它检查前三对并发现它不匹配,之前显示三个错误消息将最后一个识别为匹配项。考虑以下代码:

String m_uname = ManagerID.getText();
String m_pw = managerpw.getText();

try
{
    BufferedReader br = new BufferedReader(new FileReader("C:\Users\L\Desktop\NewAssignmentOODJ\textfile\ManagerLoginDetails.txt"));
    String reader;
    boolean login = false;

    while ((reader = br.readLine())!=null)
    {
        String[] split = reader.split(" ");
        if (m_uname.equals(split[0]) && m_pw.equals(split[1]))
        {
            login = true;
            ManagerForm mform = new ManagerForm();
            mform.setVisible(true);
            this.setVisible(false);
            break;
        }
    }
    if(!login)
    {
        JOptionPane.showMessageDialog(null,"Whoops!","Error",JOptionPane.ERROR_MESSAGE);
    }
 }

catch (Exception e)
{
    JOptionPane.showMessageDialog(null,"Invalid Login Details","Login Error",JOptionPane.ERROR_MESSAGE);
}