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

San*_*dro 13 java linux swing event-handling keyboard-events

所以我遇到的问题似乎只是在Linux上发生的错误.当按下按键时,我正试图获取我的swing应用记录,然后检测该按键何时被释放.现在这不应该是有问题的,因为KeyListener应该为我处理这个问题.

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

谢谢.

cam*_*ckr 14

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

是的,这是一个Linux问题.

在Windows上按住某个键时,您将获得多个KeyPressed事件,但只有一个KeyReleased事件.

这个问题经常被问到,我从未见过一个好的解决方案.

但我认为解决方案的基础是使用Timer.按下键时,启动计时器.当你得到另一个keyPressed时,你重启Timer.因此,只要定时器间隔大于键盘的重复率,定时器就会在按住键时连续复位.当keyPresses停止生成时,Timer将触发,因此您认为该键已被释放.这意味着您将在处理keyReleased时遇到延迟.