2015-01-22 2 views
0

Я работаю над проектом и пытаюсь внедрить имя пользователя/пароль. Ниже вы видите код. Всякий раз, когда я нажимаю кнопку входа в систему, имя пользователя изменяется на bobsyouruncle, указывая мне, что он нашел «истинное» значение в методе. Проблема в том, что он всегда делает, независимо от ввода. Это становится еще более запутанным, потому что если я изменил «return true» ниже, чтобы «вернуть false», тогда я ВСЕГДА получаю bobsyouruncle. Какие-либо предложения?Имя и пароль Java всегда верны true

loginButton.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent event) { 
      Boolean authenticated = AuthenticateCredentials(usernameField.getText(),passwordField.getPassword()); 

      if(authenticated = true){ 
       usernameField.setText("Bobsyouruncle"); 
      } else { 
       System.exit(0); 
      } 

     } 
    }); 

Ниже приведен метод доступа.

private Boolean AuthenticateCredentials(String user, char[] pass) { 
    //This is only a placeholder. 
    String theCorrectAnswer = "42"; 
    String theCorrectUser = "FPrefect"; 
    char[] passcode = theCorrectAnswer.toCharArray(); 
    optionPanel.showInternalMessageDialog(securityPanel,"Eggs are not supposed to be green."); 
    if (user.equals(theCorrectUser) && Arrays.equals(passcode,pass)) { 
     return true;  
    } else { 
     return false; 
    } 

} 

Если кто-то хочет сказать мне, что я уже завинчивания в создании безопасного имя пользователя и пароль, чтобы спасти меня неприятности на дороге, что бы денди тоже.

+2

Присмотритесь на ', если (проверка подлинности = истина) {'. Что делает '=' в Java? – Pshemo

+2

если забыть двойное равенство '==' является общей проблемой для вас, вы можете попытаться написать свои условия, такие как '(неизменяемое значение == изменчивое значение)' ie '(true == authenticated)' таким образом, если вы случайно введите '(true = authenticated)' вы получаете ошибку компиляции вместо того, чтобы выяснить, почему она не работает – chancea

+0

@chancea Правда, но в случае логического значения простой 'if (boolValue)' проще и безопаснее, тогда 'if (boolValue == верно) '. Также в случае 'if (boolValue == false)' или 'if (booValue! = True)' мы можем просто написать его как 'if (! BoolValue)'. – Pshemo

ответ

2

Здесь проблема заключается в том, что вы пытаетесь сравнить два выражения с = символом, что означает назначение в Java. Номер символ ==.

Однако, если вы измените свой код таким образом:

if(authenticated == true) 

вы еще сравнени Object (Boolean) с primitive type (boolean).

Правильный способ сделать это - использовать boolean. Измените значение возврата вашей формы функции Boolean к boolean:

private boolean AuthenticateCredentials(String user, char[] pass) { 
    return (user.equals("FPrefect") && Arrays.equals("42".toCharArray(), pass); 
} 

Затем сделать то же самое в вашей кнопки слушателя:

boolean authenticated = AuthenticateCredentials(usernameField.getText(),passwordField.getPassword()); 
if(authenticated) 
    usernameField.setText("Bobsyouruncle"); 
else 
    System.exit(0); 
+1

И почему OP должен делать все эти изменения? – Pshemo

+0

Было бы намного лучше ответить, если вы объясните это обоснование. –

+0

@DavidConrad - сделано. –

10

Вы назначаете =, но необходим оператор сравнения ==. Но, authenticated уже boolean, так что просто использовать:

if(authenticated){ 
Смежные вопросы