JavaRush /Blog Java /Random-ES /¿Cómo ocultar los caracteres de la contraseña durante la ...
fatfaggy
Nivel 26
Киев

¿Cómo ocultar los caracteres de la contraseña durante la entrada de la consola?

Publicado en el grupo Random-ES
Esta es la pregunta. Aplicación de consola, el usuario ingresa nombre de usuario y contraseña. Pero al ingresar una contraseña, es necesario "enmascarar" cada carácter de la contraseña con un asterisco, por ejemplo, o, como en Linux, simplemente no mostrar ningún carácter al ingresar la contraseña. Encontré una opción usando un hilo separado para esto. Se parece a esto: 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(); } } } } } pero durante la ejecución, en lugar de "sobrescribir" los caracteres ingresados, simplemente se muestran un montón de espacios en la pantalla :) Intenté usar "\010*" en lugar de "\010", pero luego apareció un asterisco se agrega a cada espacio)) Cuando "\b" nuevamente tiene muchos espacios en la salida. Quizás si lo ejecutas desde la línea de comando funcione, pero en teoría, así es como lo escribí. Escuché que se trata de un error de baja prioridad en Eclipse, pero ni una palabra sobre la idea.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION