一尘不染

如何在Java中从控制台读取单个字符(随着用户键入字符)?

java

当用户在Java中键入单个字符时,是否有一种简单的方法可从控制台读取它?可能吗?我尝试了这些方法,但是它们都在等待用户按Enter键:

char tmp = (char) System.in.read();
char tmp = (char) new InputStreamReader(System.in).read ();
char tmp = (char) System.console().reader().read();           // Java 6

我开始认为System.in在按下Enter之前不知道用户输入。


阅读 638

收藏
2020-02-25

共1个答案

一尘不染

您要做的是将控制台置于“原始”模式(绕过行编辑且无需输入键),而不是“经烹煮”模式(需要输入键进行行编辑)。在UNIX系统上,“ stty”命令可以更改模式。

现在,关于Java …参见Python和Java中的非阻塞控制台输入。摘抄:

如果您的程序必须基于控制台,则必须将终端从行模式切换到字符模式,并记住在程序退出之前将其还原。没有跨操作系统的可移植方法。

建议之一是使用JNI。同样,这不是很容易移植。与上面的帖子一样,该线程结尾处的另一个建议是考虑使用jCurses。

2020-02-25