JavaRush /Blog Java /Random-MS /Bagaimana untuk menyembunyikan aksara kata laluan semasa ...
fatfaggy
Tahap
Киев

Bagaimana untuk menyembunyikan aksara kata laluan semasa input konsol?

Diterbitkan dalam kumpulan
Ini soalannya. Aplikasi konsol, pengguna memasukkan log masuk dan kata laluan. Tetapi apabila memasukkan kata laluan, adalah perlu untuk "menutup" setiap aksara kata laluan dengan asterisk, sebagai contoh, atau, seperti dalam Linux, semata-mata tidak memaparkan sebarang aksara semasa memasukkan kata laluan. Saya menemui pilihan menggunakan benang berasingan untuk ini. Ia kelihatan seperti ini: 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(); } } } } } tetapi semasa pelaksanaan, bukannya "menimpa" aksara yang dimasukkan, sekumpulan ruang hanya dipaparkan pada skrin :) Saya cuba menggunakan "\010*" dan bukannya "\010", tetapi kemudian tanda bintang ditambahkan pada setiap ruang)) Apabila "\b" sekali lagi mempunyai banyak ruang dalam output. Mungkin jika anda menjalankannya dari baris arahan ia akan berfungsi, tetapi secara teori - ini adalah bagaimana saya menulisnya. Saya mendengar bahawa ini adalah pepijat keutamaan rendah dalam Eclipse, tetapi bukan perkataan tentang idea itu.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION