2016-09-07 2 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'? И каковы значения 'Login'? – Marvin

+0

@VuralAcar, они фактически совпадают, и Login.uname и Login.pass инициализируются txtUName.getText() и txtPassword.getText(), но из-за вашего предложения я просто использовал txtUName.getText() и txtPassword. GetText(). Спасибо большое!!!! – luh

ответ

0

Вы могли:

  1. Узнайте, как отлаживать в любой IDE вы используете. В режиме отладки вы можете выполнять код по одной строке за раз и видеть значения переменных в каждой точке.
  2. Увеличение ведения журнала информации, когда возникнет ошибка

Например, вы можете печатать на консоли/журналы/диалог:

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.uname или Login.pass будут интерпретироваться как регулярное выражение. Это означает, что ваш матч может работать так, как вы этого не ожидаете.

Я подозреваю, что вы действительно хотите сказать:

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

вместо этого.

Смежные вопросы