【问题标题】:Why is my password validation not working Java? [duplicate]为什么我的密码验证在 Java 中不起作用? [复制]
【发布时间】:2017-05-16 12:25:54
【问题描述】:

我的登录屏幕中有一个密码字段。出于某种原因,当我输入正确的密码 "u123" 时,即使它是正确的,它也会给我不正确的密码错误消息。为什么要这样做。

我的代码如下:

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

我知道这可能不是进行密码检查的最佳方式,但我只是一个初学者,只是想进行一些练习。

【问题讨论】:

  • 为什么不用字符串代替字符数组?
  • @Thomas 密码字符串为bad
  • 如果您使用char [],您可以尝试使用Arrays.equals吗?有一个例子here
  • @user982467 当然可以。但它不应该。见this discussion

标签: java swing jpasswordfield


【解决方案1】:

您的代码有:

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

这是两个不同的字符数组。

所以这个测试返回 false :

 if (userInput.equals(correctPassword))

请尝试使用Arrays.equals() 方法

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

【讨论】:

  • 我试过了,但我收到错误提示无法从类型 Object 对非静态方法 equals(Object) 进行静态引用
  • 好的,现在可以了。我将其更改为 if (Arrays.equals(userInput, correctPassword)) 。谢谢
  • @Prim 你的意思是if (Arrays.equals(userInput, correctPassword))Arrays.equals(userInput.equals(correctPassword)) 没有意义
  • 是的,没错。我的错。它是固定的。
猜你喜欢
  • 2017-09-15
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 2013-09-23
  • 2018-02-03
  • 2014-07-03
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多