JavaRush /Blog Java /Random-PL /Jak ukryć znaki hasła podczas wprowadzania danych z konso...
fatfaggy
Poziom 26
Киев

Jak ukryć znaki hasła podczas wprowadzania danych z konsoli?

Opublikowano w grupie Random-PL
To jest pytanie. Aplikacja konsolowa, użytkownik podaje login i hasło. Ale podczas wprowadzania hasła konieczne jest „zamaskowanie” każdego znaku hasła, na przykład gwiazdką lub, jak w systemie Linux, po prostu nie wyświetlanie żadnych znaków podczas wpisywania hasła. Znalazłem opcję, używając do tego osobnego wątku. Wygląda to mniej więcej tak: 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(); } } } } } ale podczas wykonywania, zamiast „nadpisywać” wprowadzone znaki, na ekranie po prostu wyświetla się kilka spacji :) Próbowałem użyć „\010*” zamiast „\010”, ale potem pojawiła się gwiazdka jest dodawany do każdej spacji)) Gdy "\b" ponownie daje dużo spacji na wyjściu. Może jak uruchomisz go z wiersza poleceń to zadziała, ale teoretycznie - tak to napisałem. Słyszałem, że jest to błąd o niskim priorytecie w Eclipse, ale ani słowa o tym pomyśle.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION