有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing(TXT文件)Java GUI登录

我想从名为“members.txt”的文本文件登录,该文件使用第二行(用户名)和第三行(密码)以及“/”分隔符。但当我运行它时,它们似乎可以按顺序识别文本文件的所有帐户。请帮忙。这是我的密码

btn1.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        try {
            String s;
            String bypassid = "guest";
            String bypasspw = "guest";
            String[] array;
            boolean isLogin= false; // 포기
            BufferedReader br = new BufferedReader(new FileReader("members.txt"));;
            while((s=br.readLine())!=null) {
                array=s.split("/");
                if(txtID.getText().equals(array[1])&&txtPass.getText().equals(array[2])){
                    JOptionPane.showMessageDialog(null, "로그인 되셨습니다");
                    break;
                } else if(array.length != 0 && bypassid.equals(txtID.getText())&&bypasspw.equals(txtPass.getText())){
                    JOptionPane.showMessageDialog(null, "로그인 되셨습니다");
                    break;
                } else {
                    JOptionPane.showMessageDialog(null, "계정 정보를 다시 확인해주세요.");
                }
            }
            br.close();
        } catch (IOException e10) {
                // TODO Auto-generated catch block
            e10.printStackTrace();
        }
    }
});

共 (1) 个答案

  1. # 1 楼答案

    实际上,您正在读取每一行,如果用户/密码不匹配,则在else{}块中打印错误消息。您只需设置一次布尔变量isLogin,查看isLogin是否为false,并在循环外打印一次错误消息。下面是这方面的代码片段。用下面的代码替换actionPerformed方法

    public void actionPerformed(ActionEvent e) {
                try {
                    String s;
                    String bypassid = "guest";
                    String bypasspw = "guest";
                    String[] array;
                    boolean isLogin= false; // 포기
                    BufferedReader br = new BufferedReader(new FileReader("members.txt"));
                    while((s=br.readLine())!=null) {
                        array=s.split("/");
                        if(txtID.getText().equals(array[1])&&txtPass.getText().equals(array[2])){
                            JOptionPane.showMessageDialog(null, "로그인 되셨습니다");
                            isLogin = true;
                            break;
                        } else if(array.length != 0 && bypassid.equals(txtID.getText())&&bypasspw.equals(txtPass.getText())){
                            JOptionPane.showMessageDialog(null, "로그인 되셨습니다");
                            isLogin = true;
                            break;
                        }
                    }
                    if(!isLogin) {
                        JOptionPane.showMessageDialog(null, "계정 정보를 다시 확인해주세요.");
                    }
                    br.close();
                } catch (IOException e10) {
                    // TODO Auto-generated catch block
                    e10.printStackTrace();
                }
            }
    

    请注意@David Kroukamp在评论中提到的内容