2016-07-04 1 views
1

JPassword 필드를 채워야합니다. 그러나 방법이없는 것처럼 보입니다. setPassword (char [])JPassword 필드에 값을 설정하는 방법은 무엇입니까?

유일한 방법은 setText입니다. 그러나 나는 먹이를 줄 필요가있을 것이다

getText가 더 이상 사용되지 않으므로 setText도 사용되지 않을 예정이다. 여기

그래서 같은 일이 때 setText 일어날 않습니다

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

answer on stackoverflow

에서 발췌 한 것입니다. 나는 String을 먹이고 그것은 기억에 남는다. setText은 (는) 왜 사용되지 않는 이유는 무엇입니까? setPassword (char []) 방법이없는 이유는 무엇입니까?

+1

다음은 필드의 'PlainDocument'와 char 배열을 사용하는 예제입니다 (문서가 채워지면 지울 수 있음). http://stackoverflow.com/questions/26975275/fill-a-jpasswordfield -programmatically-without-string-object- – Berger

+0

마치 작동하는 것처럼 보입니다. – john

답변

1

왜 setPassword (char []) 메서드가 없습니까?

문자열 또는 문자 배열을 마지막에 삽입하든 상관 없습니다.

... 그래서 setText도 사용되지 않습니다.

아니요. 일반적으로 사용자는 암호를 입력합니다. 암호를 어딘가에 저장하면 암호를 해독하여이 필드에 삽입해야 암호를 보낼 수 있습니다.

+0

고맙습니다. 나는 데이터베이스의'byte []'에 암호를 유지한다. 그런 다음 그것을'char []'로 변환합니다. 나는'setPassword (char [])'메서드를 사용하여'JPasswordField'에 패스워드를 렌더링 할 것을 기대하고있었습니다. 그러나, 새로운 byte (bytePassword, "UTF-8")'와 같이'byte []'를'String'으로 변환 한 다음'JPasswordField'에 그것을 공급해야 할 것 같습니다. 이것은 가비지 콜렉터가 집어 들지 않는 한 실수로 실수로 콘솔에 넘쳐날 수있는'String '패스워드를 메모리에 생성 할 것이다. – john

+1

john이 말했듯이, 패스워드를'String'으로 지정하도록 강요 당하면서 목적을 이길 것이며, IMO 'setText'는 더 이상 사용하지 말아야합니다. 어쨌든 암호를 포함하는'String'을 생성해야한다면'char []'를 사용하는 보안에 의존하는 이유는 무엇입니까? –

관련 문제