如何将值设置为JPassword字段?

问题描述:

我需要填写JPassword字段。但看起来好像没有方法setPassword (char [])如何将值设置为JPassword字段?

唯一的方法是setText。但我需要饲料String

由于getText已被弃用,所以我认为setText也将被弃用。

这里是从answer on *

When calling getText you get a String (immutable object) that may not be changed (except reflection) and so the password stays in the memory until garbage collected

摘录因此,没有同样的事情发生时,我setText。我提供String,它保留在内存中。 setText为什么不推荐使用?为什么没有setPassword (char [])方法?

+1

下面是一个使用字段的'PlainDocument'和一个字符数组(你可能想要清除一次文档已被填充)的示例:http://*.com/questions/26975275/fill-a-jpasswordfield -programmatically-without-creating-a-string-object – Berger

+0

看起来像可以工作。 – john

为什么没有setPassword(char [])方法?

不管你在最后插入一个字符串还是一个字符数组都是一样的。

...所以我认为setText也将被弃用。

不,它不会。通常用户将输入密码。如果您将密码存储在某个地方,则需要将其解密并插入此字段,然后才能发送。

+0

非常感谢。我将密码保存在数据库的'byte []'中。然后我将它转换为'char []'。我期待有一个方法'setPassword(char [])'将密码呈现给'JPasswordField'。但是,它看起来像我需要将'byte []'转换为'String',如下所示:new String(bytePassword,“UTF-8”)'然后将其提供给'JPasswordField'。这将在内存中创建一个密码'String',可能会被意外刷新到控制台,除非它被垃圾收集器拾取。 – john

+1

正如约翰所说的,*将密码指定为'String'有违目的,而IMO 'setText'应该被弃用。如果你必须创建一个包含密码的字符串,为什么要依靠使用'char []'的安全性呢? –