package xianchengdeyongfa;public class EraserThread extends Thread {
private boolean active;
private String mask;


public EraserThread(){
this('*');
}
public EraserThread(char maskChar) {
// TODO Auto-generated constructor stub
active = true;
mask = "\010" + maskChar;
}

public void setActive(boolean active){
this.active=active;
}

public boolean isActive(){
return active;
}

public void run(){
while(isActive()){
System.out.print(mask);
try {
Thread.currentThread().sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
}
package xianchengdeyongfa;import java.util.Scanner;public class EraserThreadDemo { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
while(true){
System.out.println("输入名称...");
String name = scan.next();

System.out.println("输入密码...");
EraserThread  eraserThread = new EraserThread();
eraserThread.start();
String password = scan.next();
eraserThread.setActive(false);


if("dujianfeng".equals(name)&&"123456".equals(password)){
System.out.println("欢迎杜先生");
}else {
System.out.println("密码或名称输入有误");
}
} }}
我想要结果是     输入名称dujianfeng
                 输入密码######                 
                 控制台输出     欢迎杜先生

解决方案 »

  1.   

    稍微有点麻烦:
    Console console = System.console();
    String pwd = new String( console.readPassword( "Enter Password:", new Object[0] ))在Eclipse中无法调试,因为获取不到console(控制台)。
      

  2.   

    在线程定义的时候有两个问题:
    1、active最好用 volatile修饰,写成private volatile boolean active;
    2、sleep方法应该Thread.sleep(1000);sleep是静态方法,而Thread.currentThread的结果是一个对象。程序问题:
    只要线程启动,就会一直输出星号