JavaRush /Java блог /Архив info.javarush /Как спрятать символы пароля во время ввода с консоли?
fatfaggy
26 уровень
Киев

Как спрятать символы пароля во время ввода с консоли?

Статья из группы Архив info.javarush
Такой вот вопрос. Консольное приложение, пользователь вводит логин и пароль. Но во время ввода пароля необходимо "маскировать" каждый символ пароля звездочкой например, или как в линуксе просто не выводить никаких символов во время ввода пароля. Нашел вариант с использованием отдельного потока для этого. Выглядит примерно так: 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(); } } } } } но во время выполнения вместо того, чтобы "затирать" вводимые символы - просто выводится на экран куча пробелов :) Пробовал вместо "\010" использовать "\010*", но тогда к каждому пробелу еще звездочка добавляется)) При "\b" в выводе снова куча пробелов. Может если из командной строки запускать то будет работать, но в идее - вот так вот как я написал. Встречал, что это низкоприоритетный баг такой в Эклипс, но про идею - ни слова.
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
RocK_AngeL Уровень 30
11 февраля 2016
Ну ты уже написал ответ на свой вопрос)
Пробовал вместо "\010" использовать "\010*", но тогда к каждому пробелу еще звездочка добавляется))
Посмотри в таблицу ascii что такое "\010"))))