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

时间:2013-05-21 05:07:29

标签: java unix terminal stdin

我正在尝试使用java编写一个控制台游戏,当你按住某个键时,我希望它能够不断地移动你的角色。

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

我已经使用stty将终端设置为原始模式,但我似乎没有获得关键的发布事件。

这个答案似乎表明我确实可以从STDIN中获取这些事件:https://stackoverflow.com/a/1598436/2404047

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

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

1 个答案:

答案 0 :(得分:0)

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

可能的解决方案是:

  1. 使用本机实用程序获取事件,将它们重定向到文件/管道并将其从该文件读入java代码
  2. 直接使用JNI / JNA
  3. 使用已经包装JNI的库并为此目的公开Java API。请查看Charva,为您提供所需的API,甚至更多。