小编典典

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

linux

因此,我遇到的问题似乎是仅在Linux上发生的错误。我正在尝试在按下某个键时记录我的swing应用程序,然后检测该键何时被释放。现在不应该有问题,因为KeyListener应该可以为我处理这个问题。

问题是,当我按下键时,会得到很多重复的keyPressed()/
keyReleased()事件,而不仅仅是单个keypressed()事件。有谁知道在Linux上何时真正发布密钥的解决方案或解决方法?

谢谢。


阅读 381

收藏
2020-06-02

共1个答案

小编典典

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

是的,这是Linux问题。

在Windows上,当按下某个键时,您会收到多个KeyPressed事件,但只有一个KeyReleased事件。

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

但是我认为解决方案的基础是使用计时器。按下键后,将启动计时器。当您再次按下另一个键时,将重新启动计时器。因此,只要计时器间隔大于键盘的重复频率,就可以在按住键时不断重置计时器。当keyPresses停止生成时,计时器将触发,因此您假设已释放键。这意味着您在处理keyReleased时会有延迟。

2020-06-02