我编写了一个程序来屏蔽用户在命令行输入的输入。 详细地: 当我的程序启动时,我运行一个新的线程,通过System.out.print(" \ 010 *")每毫秒打印一个星号。 同时我的main方法通过read.nextLine()读入用户输入。
当我在eclipse中运行这个程序时,输出是一个星号溢出(这是我所期望的)。 但是,当我从终端运行这个程序时,每当我输入一个字符时,我只会看到一个星号。
这是为什么?我读了一些其他文章,说明CPU如何仅为命令行分配6-10%的内存,而典型的IDE只有两倍多。
我的代码如下所示仅供参考:
import java.util.Scanner;
public class Main {
public static void main(String [] args){
PasswordMasker passwordMasker = new PasswordMasker();
passwordMasker.start();
Scanner scan = new Scanner(System.in);
String password = scan.nextLine();
passwordMasker.stopMasking();
System.out.println("The password is: " + password);
}
}
public class PasswordMasker extends Thread {
private boolean maskInProgress = true;
public void run(){
mask();
}
private void mask() {
while(maskInProgress){
try {
Thread.sleep(1);
System.out.print("\010*");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Masking stopped");
}
public void stopMasking(){
this.maskInProgress = false;
}
}
答案 0 :(得分:1)
因为Eclipse控制台无法显示退格符(\ b或\ 010), 因为bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=76936
cmd可以显示它,这就是您的程序在cmd中按预期工作的原因。
然而,根据错误报告,修复程序将在Eclipse 4.5 M4中提供。