JavaRush /Blogue Java /Random-PT /Como ocultar os caracteres da senha durante a entrada do ...
fatfaggy
Nível 26
Киев

Como ocultar os caracteres da senha durante a entrada do console?

Publicado no grupo Random-PT
Esta é a questão. Aplicativo de console, o usuário insere login e senha. Mas ao inserir uma senha, é necessário “mascarar” cada caractere da senha com um asterisco, por exemplo, ou, como no Linux, simplesmente não exibir nenhum caractere ao inserir a senha. Encontrei uma opção usando um thread separado para isso. É mais ou menos assim: package main; import java.io.*; public class Main { public static void main(String[] args) { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter username: "); String user = in.readLine(); Thread hide = new PasswordsHider("Enter password: "); hide.start(); String pass = in.readLine(); hide.interrupt(); } private static class PasswordsHider extends Thread { public PasswordsHider(String prompt) { super("Hiding passwords thread"); System.out.print(prompt); } @Override public void run() { while (!isInterrupted()) { System.out.print("\010"); try { Thread.sleep(1); } catch (InterruptedException e) { //e.printStackTrace(); } } } } } mas durante a execução, em vez de “sobrescrever” os caracteres inseridos, vários espaços são simplesmente exibidos na tela :) Tentei usar “\010*” em vez de “\010”, mas depois um asterisco é adicionado a cada espaço)) Quando "\b" novamente tem muitos espaços na saída. Talvez se você executá-lo na linha de comando funcione, mas em teoria - foi assim que eu escrevi. Ouvi dizer que este é um bug de baixa prioridade no Eclipse, mas nem uma palavra sobre a ideia.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION