在 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
安德烈
答案 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]);