终端原始模式下来自STDIN的Java密钥释放事件

终端原始模式下来自STDIN的Java密钥释放事件,java,unix,terminal,stdin,Java,Unix,Terminal,Stdin,我试图用java编写一个控制台游戏,当你按下一个键时,我希望它能不断地移动你的角色 这意味着我需要按键和按键释放事件,因为在按键开始一遍又一遍地输入同一个字母之前,按下按键会有一个延迟 我已经使用stty将终端置于原始模式,但我似乎没有获得密钥释放事件 这个答案似乎表明我确实可以从STDIN获得这些事件: 在原始模式下,大多数键实际接收到的是单个字节,但在某些情况下,如箭头键,我得到多个字节 有没有办法通过STDIN获取按键和释放事件,或者像这样的控制台游戏根本不可行?这是你的误解。您无法使用纯

我试图用java编写一个控制台游戏,当你按下一个键时,我希望它能不断地移动你的角色

这意味着我需要按键和按键释放事件,因为在按键开始一遍又一遍地输入同一个字母之前,按下按键会有一个延迟

我已经使用stty将终端置于原始模式,但我似乎没有获得密钥释放事件

这个答案似乎表明我确实可以从STDIN获得这些事件:

在原始模式下,大多数键实际接收到的是单个字节,但在某些情况下,如箭头键,我得到多个字节


有没有办法通过STDIN获取按键和释放事件,或者像这样的控制台游戏根本不可行?

这是你的误解。您无法使用纯java从控制台获取事件

可能的解决办法是:

  • 使用本机实用程序获取事件,将它们重定向到文件/管道,并将它们从该文件读入java代码
  • 直接使用JNI/JNA
  • 使用已经包装JNI的库并为此公开JavaAPI。看看它为您提供了您需要的API,甚至更多

  • 所以,如果我读C中的STDIN,我可以接收关键事件吗?或者我需要通过其他方法获取关键事件吗?(包括新闻和发布活动)