Java 禁止显示System.in到System.out(提示输入密码)

Java 禁止显示System.in到System.out(提示输入密码),java,passwords,Java,Passwords,我想在Java代码中提示用户输入密码,出于安全原因,我不希望将输入打印到屏幕上 我知道类控制台,但出于测试原因,我希望能够从IDE运行我的程序。有其他选择吗?我强烈建议在可能的情况下使用控制台的设置,如果没有,则使用扫描仪或读卡器 然而,对于这个问题的具体措辞,有一个非常丑陋的解决方案 解决方案基本上是反复向控制台发送退格(\b)字符,以隐藏写入的内容。也许你可以用某种类型的监听器来制定一个资源更友好的版本,但我不确定这一点 一些示例代码正好可以做到这一点: public class PwdCo

我想在Java代码中提示用户输入密码,出于安全原因,我不希望将输入打印到屏幕上


我知道类
控制台
,但出于测试原因,我希望能够从IDE运行我的程序。有其他选择吗?

我强烈建议在可能的情况下使用
控制台
的设置,如果没有,则使用
扫描仪
读卡器

然而,对于这个问题的具体措辞,有一个非常丑陋的解决方案

解决方案基本上是反复向控制台发送退格(
\b
)字符,以隐藏写入的内容。也许你可以用某种类型的监听器来制定一个资源更友好的版本,但我不确定这一点

一些示例代码正好可以做到这一点:

public class PwdConsole {
    public static void main(String[] args) throws Exception {
        ConsoleEraser consoleEraser = new ConsoleEraser();
        System.out.print("Password?  ");
        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        consoleEraser.start();                       
        String pass = stdin.readLine();
        consoleEraser.halt();
        System.out.print("\b");
        System.out.println("Password: '" + pass + "'");
    }


    class ConsoleEraser extends Thread {
        private boolean running = true;
        public void run() {
            while (running) {
            System.out.print("\b ");
        }


        public synchronized void halt() {
            running = false;
        }
    }
}

我能找到的唯一解决方案是使用控制台,但如果没有控制台,就求助于普通读者。这里有人提出:有效而且非常丑陋。因为显然没有更好的解决方案,所以我将暂时使用它,直到我在代码中考虑到其他可能的更改。谢谢:)