我正在编写一个应该在 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;
}