因此,我遇到的问题似乎是仅在 Linux 上发生的错误。我试图在按下某个键时记录我的摇摆应用程序,然后检测该键何时释放。现在这不应该成为问题,因为KeyListener应该为我处理这个问题。
问题是当我按住键时,我会收到很多重复的 keyPressed()/keyReleased() 事件,而不仅仅是单个 keypressed()。有没有人有解决方案或解决方法来知道何时在 linux 上真正发布了密钥?
谢谢你。
因此,我遇到的问题似乎是仅在 Linux 上发生的错误。我试图在按下某个键时记录我的摇摆应用程序,然后检测该键何时释放。现在这不应该成为问题,因为KeyListener应该为我处理这个问题。
问题是当我按住键时,我会收到很多重复的 keyPressed()/keyReleased() 事件,而不仅仅是单个 keypressed()。有没有人有解决方案或解决方法来知道何时在 linux 上真正发布了密钥?
谢谢你。
所以我遇到的问题似乎是一个只发生在 Linux 上的错误
是的,这是一个 Linux 问题。
在 Windows 上,当按住某个键时,您会收到多个 KeyPressed 事件,但只有一个 KeyReleased 事件。
这个问题经常被问到,我从来没有见过一个好的解决方案。
但我认为解决方案的基础是使用定时器。按下该键时,您将启动计时器。当你得到另一个 keyPressed 时,你重新启动 Timer。所以只要定时器间隔大于键盘的重复率,当一个键被按住时定时器就会不断地重置。当 keyPresses 停止生成时,Timer 将触发,因此您假设密钥已被释放。这意味着您在处理 keyReleased 时会有延迟。
这个问题在这里重复。
这是一个作为 AWTEventListener 实现的 hack,可以在应用程序启动时安装。
你可以在这里找到一个很好的解决方法。
这是 Sun 的错误(包括示例解决方法):http ://bugs.sun.com/view_bug.do?bug_id=4153069
使用 KeyEventDispatcher 实现,您将正确地进行键绑定。