首页 > 解决方案 > System.console.readPassword() 要求用户在读取密码之前按回车

问题描述

通过控制台类读取输入时出现问题。

readPassword() 方法在控制台中按下回车键之前不会开始读取,并将继续在控制台中显示字符。

后用户在控制台输入回车键,读取密码开始从控制台读取字符。

我想知道这是否与通过 ReadPassword() 函数中的同步关键字获取控制台中的锁有关。

ReadPassword 函数的代码 -

public char[] readPassword(String fmt, Object ... args) {
        char[] passwd = null;
        synchronized (writeLock) {
            synchronized(readLock) {
                try {
                    echoOff = echo(false);
                } catch (IOException x) {
                    throw new IOError(x);
                }
                IOError ioe = null;
                try {
                    if (fmt.length() != 0)
                        pw.format(fmt, args);
                    passwd = readline(true);
                } catch (IOException x) {
                    ioe = new IOError(x);
                } finally {
                    try {
                        echoOff = echo(true);
                    } catch (IOException x) {
                        if (ioe == null)
                            ioe = new IOError(x);
                        else
                            ioe.addSuppressed(x);
                    }
                    if (ioe != null)
                        throw ioe;
                }
                pw.println();
            }
        }
        return passwd;
    }

标签: javaconsole

解决方案


推荐阅读