当前位置: 首页 > 知识库问答 >
问题:

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

吉鸿宝
2023-03-14

有没有一种简单的方法可以在用户用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之前并不知道用户的输入。

共有2个答案

通啸
2023-03-14

您需要将控制台设置为原始模式。没有内置的独立于平台的方法。不过,jCurses可能很有趣。

在Unix系统上,这可能起作用:

String[] cmd = {"/bin/sh", "-c", "stty raw </dev/tty"};
Runtime.getRuntime().exec(cmd).waitFor();

例如,如果您想考虑击键之间的时间,下面的示例代码可以实现这一点。

东门修能
2023-03-14

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

现在,关于Java...请参见Python和Java中的非阻塞控制台输入。节选:

如果您的程序必须基于控制台,您必须将您的终端脱机模式切换到字符模式,并记住在您的程序退出之前恢复它。没有可移植的方法可以跨操作系统执行此操作。

其中一个建议是使用JNI。再说一遍,那也不是很便携。线程末尾的另一个建议(与上面的文章相同)是看看如何使用jCurses。

 类似资料:
  • 问题内容: 当用户在Java中键入单个字符时,是否有一种简单的方法可从控制台读取它?可能吗?我尝试了这些方法,但是它们都在等待用户按Enter键: 我开始认为System.in在按下Enter之前不知道用户输入。 问题答案: 您要做的是将控制台置于“原始”模式(绕过行编辑且无需输入键),而不是“经烹煮”模式(需要输入键进行行编辑)。在UNIX系统上,“ stty”命令可以更改模式。 现在,关于Ja

  • 问题内容: 有没有一种方法可以从用户输入中读取一个字符?例如,他们在终端上按一个键,然后将其返回(类似)。我知道Windows中有一个功能,但是我想要一些跨平台的功能。 问题答案: 以下是指向网站的链接,该网站说明了如何在Windows,Linux和OSX中读取单个字符:http : //code.activestate.com/recipes/134892/

  • 问题内容: 如何使用该类从控制台读取输入?像这样: 基本上,我只需要让扫描程序读取用户名的输入,然后将输入分配给变量。 问题答案: 一个简单的例子来说明如何从中读取单个整数。这真的很简单。 要检索用户名,我可能会使用。 如果你想对输入进行更多控制,或者仅验证变量,也可以使用。 你可以在API文档中找到有关其实现的更多信息

  • 如何使用类从控制台读取输入?类似这样的事情: 基本上,我想要的只是让扫描器读取用户名的输入,并将输入赋给变量。

  • 本文向大家介绍C#从控制台读取字符串的方法,包括了C#从控制台读取字符串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#从控制台读取字符串的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 问题内容: 我想从命令行读取标准输入,但是在提示我输入之前,我的尝试以结束程序退出而告终。我正在寻找C#中的Console.ReadLine()等效项。 这是我目前拥有的: 问题答案: 我不确定块有什么问题 因为它可以在我的机器上使用。但是,对于下一个块,您需要一个指针,该指针指向要将输入分配给它们的变量。尝试替换为。不要使用,因为它解析内存中已有的字符串,而不是解析来自stdin的字符串。如果您