Java BufferedReader赢得';看不懂

Java BufferedReader赢得';看不懂,java,file,oop,bufferedreader,Java,File,Oop,Bufferedreader,我有一个程序,用户名和密码在一个文本文件中,文本文件如下所示: election:12345 我有这个代码来读取文件 try { BufferedReader read=new BufferedReader(new FileReader("election_un_pass.txt")); String line=""; while((line=read.readLine())!=null) { String [] info=line.split(":"

我有一个程序,用户名和密码在一个文本文件中,文本文件如下所示:

election:12345
我有这个代码来读取文件

try {
    BufferedReader read=new BufferedReader(new FileReader("election_un_pass.txt"));
    String line="";

    while((line=read.readLine())!=null) {
        String [] info=line.split(":");

        if(info[0].matches(Login.uname) && info[1].matches(Login.pass)){
            new Main();
        } else {
            JOptionPane.showMessageDialog(null, "Username or Password might not be correct");
        }
        Login.txtUName.setText("");
        Login.txtPassword.setText("");
     }
} catch (Exception e1) {
    e1.printStackTrace();
}
每次运行程序时,即使输入的用户名和密码正确,也可能会出现
用户名或密码不正确的消息,并且
new Main()
不会出现。

您可以:

  • 了解如何在您使用的任何IDE中进行调试。使用调试模式,您可以一次执行一行代码,并查看每个点的变量值
  • 发生错误时增加日志记录信息
  • 例如,您可以打印到控制台/日志/对话框:

    String msg = String.format("could not find user name: [%s] and password: [%s] in line: [%s]", Login.uname, Login.pass, line);
    

    显然,当出于安全原因输入了错误的值时,您不应该在任何地方打印预期的用户名和密码,但这可能是一种快速找出问题所在的方法:)它可能很简单,比如在某个地方尾随空格字符或在某个地方尾随不正确的大小写。

    您确定要使用
    String.matches(regex)
    进行比较吗?参数被视为正则表达式,因此
    Login.uname
    Login.pass
    值中的任何正则表达式元字符都将被解释为正则表达式。这意味着你的对手可能会以你意想不到的方式发挥作用

    我怀疑你真的想说:

    if (info[0].equals(Login.uname) && info[1].equals(Login.pass)) {
    

    相反。

    请检查Login.uname和Login.pass的值,它们似乎不匹配。确定不想使用
    字符串。equals
    Login
    的值是什么?@VuralAcar哦,它们实际上是匹配的,Login.uname和Login.pass被初始化为txtname.getText()和txtPassword.getText(),但是由于你的建议,我直接使用了txtname.getText()和txtPassword.getText()。非常感谢你@马文
    txtname.getText()
    txtPassword.getText()
    但是我现在直接使用了它们,现在已经修复了,非常感谢!!!可能重复的