java - 如何从 Java 控制台读取单个字符(当用户键入时)?

标签 java input console

当用户在 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 之前不知道用户输入。

最佳答案

您要做的是将控制台置于“原始”模式(绕过行编辑并且不需要回车键)而不是“熟化”模式(需要使用回车键进行行编辑。)在 UNIX 系统上,'stty '命令可以改变模式。

现在,关于 Java...参见 Non blocking console input in Python and Java .摘录:

If your program must be console based, you have to switch your terminal out of line mode into character mode, and remember to restore it before your program quits. There is no portable way to do this across operating systems.

其中一个建议是使用 JNI。同样,这不是很便携。线程末尾的另一个建议,与上面的帖子相同,是查看使用 jCurses .

关于java - 如何从 Java 控制台读取单个字符(当用户键入时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46331697/

相关文章:

java - 关键事件发生时代码的执行顺序

java - 用于事务管理的 Spring + HibernateTemplate + AOP 不起作用

c - 将文件中的值插入链表时出现段错误

javascript - 对于 Greasemonkey 中的这个 jQuery 示例,为什么会触发 alert() 但不会触发 console.log()?

bash - 如何在 vagrant ssh bash 中配置颜色

java - IOException - read end dead - 在此示例中导致它的原因以及如何修复它 - Java 中的多线程应用程序

java - 当父类(super class)使用@Inject时,如何构造一个类?

javascript - 如果输入之一已填充,则禁用表格行中的输入

php - 从输入文本创建标签云的最佳方法

java - 如果在控制台中输入非数字,如何使程序继续运行