2016-07-04 107 views
1

我需要填寫JPassword字段。但看起來好像沒有方法setPassword (char [])如何將值設置爲JPassword字段?

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

由於getText已被棄用,所以我認爲setText也將被棄用。

這裏是從answer on stackoverflow

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://stackoverflow.com/questions/26975275/fill-a-jpasswordfield -programmatically-without-creating-a-string-object – Berger

+0

看起來像可以工作。 – john

回答

1

爲什麼沒有setPassword(char [])方法?

不管你在最後插入一個字符串還是一個字符數組都是一樣的。

...所以我認爲setText也將被棄用。

不,它不會。通常用戶將輸入密碼。如果您將密碼存儲在某個地方,則需要將其解密並插入此字段,然後才能發送。

+0

非常感謝。我將密碼保存在數據庫的'byte []'中。然後我將它轉換爲'char []'。我期待有一個方法'setPassword(char [])'將密碼呈現給'JPasswordField'。但是,它看起來像我需要將'byte []'轉換爲'String',如下所示:new String(bytePassword,「UTF-8」)'然後將其提供給'JPasswordField'。這將在內存中創建一個密碼'String',可能會被意外刷新到控制檯,除非它被垃圾收集器拾取。 – john

+1

正如約翰所說的,被迫將密碼指定爲'String'有違目的,而IMO 'setText'應該被棄用。如果你必須創建一個包含密碼的字符串,爲什麼要依靠使用'char []'的安全性呢? –

相關問題