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, 10:37
Ну ты уже написал ответ на свой вопрос)
Пробовал вместо "\010" использовать "\010*", но тогда к каждому пробелу еще звездочка добавляется))
Посмотри в таблицу ascii что такое "\010"))))
fatfaggy
Уровень 26
11 февраля 2016, 21:38
"\08" идея красненьким подчеркивает) \080 тоже ей не нравится) и \008 тоже)