2016-09-07 54 views
-1

我有一个程序,用户名和密码是一个文本文件,该文本文件看起来像这样:的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(":"); 

     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(); 
} 

每次我运行我的程序时,即使我输入的用户名和密码都正确,Username or Password might not be correct消息仍然会出现,并且new Main()不会出现。

+0

请检查它们似乎不匹配的Login.uname和Login.pass值。 –

+1

确定你不想使用'String.equals'? “登录”的价值是什么? – Marvin

+0

@VuralAcar哦,他们实际上是匹配的,Login.uname和Login.pass被初始化为txtUName.getText()和txtPassword.getText(),但由于你的建议,我直接使用了txtUName.getText()和txtPassword。 gettext的()。非常感谢!!!! – luh

回答

0

,你可以:

  1. 了解如何在任何IDE你正在使用调试。使用调试模式,您可以一次执行一行代码,并查看每个点处变量的值。
  2. 增加的日志信息的错误occurrs

例如,你可以打印到控制台/日志/对话框:

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

显然,你不应该打印预期的用户名和密码在任何地方当出于安全原因输入了错误的值时,但它可能是快速找出错误的方法:)它可能就像在某处尾随空白字符或不正确的情况一样简单。

0

您是否确定要使用String.matches(regex)进行比较?该参数是作为正则表达式使用的,因此您的Login.unameLogin.pass值中的任何正则表达式元字符都将被解释为正则表达式。这意味着你的比赛可能会以你不期望的方式进行。

我怀疑你真的想说:

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

代替。