如何在Swing中停止重复的keyPressed()/ keyReleased()事件

所以我遇到的问题似乎是只在Linux上发生的错误。 我试图让我的挥杆应用程序logging,当一个键被按下,然后检测到该键被释放。 现在,不应该有问题,因为KeyListener应该为我处理。

问题是,当我按住键时,我得到了很多重复的keyPressed()/ keyReleased()事件,而不是只有一个keypressed()。 有没有人有一个解决scheme或解决方法知道什么时候一个密钥是真的在Linux上发布?

谢谢。

所以我遇到的问题似乎是只在Linux上发生的错误

是的,这是一个Linux问题。

在Windows中,当按下某个键时,您将获得多个KeyPressed事件,但只有一个KeyReleased事件。

这个问题经常被问到,我从来没有见过一个好的解决scheme。

但我认为解决scheme的基础是使用一个计时器。 当按下键时,你启动一个定时器。 当你得到另一个keyPressed你重新启动计时器。 所以只要定时器的时间间隔大于键盘的重复频率,按住键的时候定时器就会不断的复位。 当keyPresses停止产生时,定时器将会触发,所以你认为键已经释放。 这意味着你将会在处理keyReleased时有一个延迟。

这个问题在这里重复。

这是一个作为AWTEventListener实现的hack ,可以在应用程序的开始安装。

你可以在这里find一个很好的解决方法。

以下是Sun的错误(包括示例解决方法): http ://bugs.sun.com/view_bug.do?bug_id= 4153069