2017-05-16 8 views
0

ログイン画面にパスワードフィールドがあります。何らかの理由で正しいパスワード("u123")を入力すると、正しくても間違ったパスワードエラーメッセージが表示されます。なぜこれをやっているのですか?パスワード検証がJavaで動作しないのはなぜですか?

コード私は以下があります:

btnLogin = new JButton("Login"); 
btnLogin.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      char[] userInput = passwordField.getPassword(); 
      char[] correctPassword = { 'u', '1', '2', '3'}; 

      if (userInput.equals(correctPassword)) { 
      JOptionPane.showMessageDialog(LoginScreen.this, 
        "Success! You typed the right password."); 
      } else { 
       JOptionPane.showMessageDialog(LoginScreen.this, 
        "Invalid password. Try again.", 
        "Error Message", 
        JOptionPane.ERROR_MESSAGE); 
      } 
     } 
    }); 

私は、これは、パスワードのチェックを行うための最善の方法ではないかもしれない知っているが、私はちょうど初心者だし、ちょうどいくつかの練習を取得しようとしています。

+0

を使用しようか? – Thomas

+0

@Thomasパスワードの文字列は[悪い]です(http://stackoverflow.com/questions/8881291/why-is-char-preferred-over-st-for-passwords?rq=1)。 –

+0

'char []'を使うなら、 'Arrays.equals'を使ってみることができますか?ここに例があります(https://docs.oracle.com/javase/tutorial/uiswing/components/passwordfield.html) –

答えて

3

あなたのコードがあります

char[] userInput = passwordField.getPassword(); 
char[] correctPassword = { 'u', '1', '2', '3'}; 

それは文字の二つの異なる配列です。

したがって、このテストはfalseを返します。

if (userInput.equals(correctPassword)) 

代わりに、あなたは、文字列の代わりに文字配列を使用していないのはなぜArrays.equals()方法

if (Arrays.equals(userInput, correctPassword)) { ... } 
+0

私はそれを試して、静的でないメソッドへの静的参照は、ObjectオブジェクトのObject(Object)と等しくなりました。 – user982467

+1

これで機能します。私は 'if(Arrays.equals(userInput、correctPassword))'に変更しました。 Thx – user982467

+0

@Prim本当に 'if(Arrays.equals(userInput、correctPassword))'を意味していました。 'Arrays.equals(userInput.equals(correctPassword))'は意味がありません – eis

関連する問題