java

java System.in에서 키보드 입력을 받을때 에코되는 문자를 안보이게 처리하기

알 수 없는 사용자 2007. 11. 16. 14:56
java 커맨드라인(command line)기반 응용프로그램에서 키보드 입력을 받을때 입력하는 문자가 항상 에코되어 보여진다. 문제는 암호같은걸 받을때 이를 마스킹(masking)해주거나 지워줘야하는데 해결책이 별로 없다. 아래와 같은 쓰레드를 이용한 대안이 있다.

# 쓰레드
		// 키보드 입력시 에코문자를 지워줄 쓰레드
this.threadKeyInEchoEraser = new Thread(new Runnable(){
public void run()
{
while(shouldRunKeyInEchoEraserThread){
System.out.print("\010*");
try{
Thread.sleep(1);
}
catch(InterruptedException ie){
ie.printStackTrace();
}
}
}
});
this.shouldRunKeyInEchoEraserThread = true;
this.threadKeyInEchoEraser.start();

# 입력받는 부분
		
BufferedReader br
= new BufferedReader(new InputStreamReader(System.in));
String password = br.readLine();

// stop keyinEchoEraser thread
this.shouldRunKeyInEchoEraserThread = false;

System.out.println("passwd = "+password);