Такой вот вопрос.
Консольное приложение, пользователь вводит логин и пароль. Но во время ввода пароля необходимо "маскировать" каждый символ пароля звездочкой например, или как в линуксе просто не выводить никаких символов во время ввода пароля.
Нашел вариант с использованием отдельного потока для этого. Выглядит примерно так:
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" в выводе снова куча пробелов. Может если из командной строки запускать то будет работать, но в идее - вот так вот как я написал.
Встречал, что это низкоприоритетный баг такой в Эклипс, но про идею - ни слова.
Посмотри в таблицу ascii что такое "\010"))))