1

JFrame类中,我有一个JPasswordField对象,如下所示:

pswdTextField = new JPasswordField(20);
externalPanel.add(pswdTextField, "w 90%, wrap");

我尝试通过以下代码行访问其插入的内容(用户插入的密码):

char[] pswd = pswdTextField.getPassword();
System.out.println("Password: " + pswd.toString());

问题是,当我打印此内容时,我得到以下输出:密码:[C@d5c0f9而不是插入的密码

为什么?这是什么意思?如何获取插入的密码?

肿瘤坏死因子

安德烈亚

4

3 回答 3

6

为什么?这是什么意思?

如果您浏览文档,那么您就会得到这个原因。

为了增强安全性,建议使用后将返回的字符数组清零,将每个字符设置为零。

如何获取插入的密码?

您可以通过以下方式获取密码,

  char[] pswd = pswdTextField.getPassword();
  String password=new String(pswd);

或者,您可以直接打印System.out.print

  System.out.print(pswd); // It override ...print(char[]) method
                          // without concat with another String.

编辑

请注意,如果你char[]String它连接,它将继承Object.toString()方法。

 System.out.print("Password: " +pswd);// It will print like Password: [C@d5c0f9
于 2013-11-30T10:43:39.823 回答
2

pswdTextField.getText()就是你要找的。toString()不会返回 a 内的文本JPasswordField()

Object 类的 toString 方法返回一个字符串,该字符串由对象作为实例的类的名称、at 符号字符“@”和对象的哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:getClass().getName() + '@' + Integer.toHexString(hashCode())

所以用

System.out.println("Password: " +pswdTextField.getText());
于 2013-11-30T10:38:48.180 回答
0

getText() 对于 JPasswordField 已贬值

在 Java 源代码中,它写在 getText() 定义之上

" 出于安全原因,此方法已弃用。"

所以 getPassword() 是首选。您面临的问题是您正在使用 System.out.println() 打印一个数组,或者使用该字符数组创建一个字符串,或者使用 for 循环逐个访问每个元素

for(int i=0;i < charArray.length;i++)

System.out.print(charArray[i]);

于 2013-11-30T11:20:34.583 回答