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