如何访问Swing JPasswordField对象中的文本?

时间:2013-11-30 10:34:09

标签: java swing user-interface jpasswordfield

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

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

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

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

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

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

TNX

安德烈

3 个答案:

答案 0 :(得分:4)

  

为什么呢?这是什么意思?

如果你通过docs而不是你得到这个理由。

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

  

如何获取插入的密码?

您可以通过

获取密码
  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

答案 1 :(得分:2)

pswdTextField.getText()正是您所寻找的。 toString()不会在JPasswordField()内返回文字。

  

Object类的toString方法返回一个由。组成的字符串   对象是实例的类的名称,at-sign   字符“@”,以及散列的无符号十六进制表示   对象的代码。换句话说,此方法返回一个相等的字符串   取值为:getClass()。getName()+'@'+   Integer.toHexString(hashCode()方法)

所以使用

System.out.println("Password: " +pswdTextField.getText());

答案 2 :(得分:0)

为JPasswordField

折旧了getText()

在Java源代码中,它的上面写着getText()定义

“出于安全原因,不推荐使用此方法。”

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

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

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