1

我正在编写一个应该在 Windows 和 Linux 中运行的 Java 控制台 GUI。键入到控制台窗口中的字符应在键入后立即进入该过程。我正在使用 write() 函数(长度为 1),然后是 flush()。没有冲洗它直到我按下它才会处理<Enter>。该过程正在回显字符,因此我应该在控制台中看到它们。在 Windows 中一切正常,但在 Linux 中,显然它会<CR>为每个 flush() 发送一个。因为进程做的第一件事是获取密码,所以它在第一个字符后得到了错误的密码(因为是由 提交的<CR>)。

如果我跳过刷新,它可以工作,但输入的文本在控制台中不可见,直到下一个<Enter>.

任何人都可以帮助如何避免<CR>使用flush()发送那些s吗?

非常感谢!

代码示例:

        BufferedWriter writer;
        ......
        @Override
        public boolean dispatchKeyEvent(KeyEvent e) {
            switch(e.getID()) {
                case KeyEvent.KEY_TYPED:
                byte b;
                b = (byte)e.getKeyChar();
                try {
                    writer.write(b);
                    writer.flush();
                } catch (IOException ex) {
                }
                break;
            }
            return true;
        }
4

1 回答 1

1

您是否按行读取输入?你能给我们你在哪里做的代码flush()以及你在它之前做了什么吗?从您解释的方式来看,就好像 flush() 将其推送到流中时flush()不会推送任何尚未在缓冲区中的内容。所以,我可能会在你开始冲洗之前检查它是否进入了那里。

于 2013-09-26T18:08:54.603 回答