2016-09-07 77 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)) { 

代替。