Ito ang tanong. Console application, ang user ay nagpasok ng login at password. Ngunit kapag nagpapasok ng isang password, kinakailangan na "i-mask" ang bawat karakter ng password na may asterisk, halimbawa, o, tulad ng sa Linux, hindi lamang magpakita ng anumang mga character habang ipinapasok ang password. Nakakita ako ng opsyon gamit ang isang hiwalay na thread para dito. Mukhang ganito:
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(); } } } } }
ngunit sa panahon ng pagpapatupad, sa halip na "i-overwriting" ang mga ipinasok na character, isang bungkos ng mga puwang ang ipinapakita lamang sa screen :) Sinubukan kong gumamit ng "\010*" sa halip na "\010", ngunit pagkatapos ay isang asterisk ay idinagdag sa bawat puwang)) Kapag ang "\b" muli ay may maraming puwang sa output. Siguro kung patakbuhin mo ito mula sa command line ito ay gagana, ngunit sa teorya - ito ay kung paano ko isinulat ito. Narinig ko na ito ay isang mababang priyoridad na bug sa Eclipse, ngunit hindi isang salita tungkol sa ideya.
GO TO FULL VERSION