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

标签 java linux swing event-handling keyboard-events

所以我遇到的问题似乎是一个只发生在 Linux 上的错误。我试图在按下某个键时记录我的 Swing 应用程序,然后检测该键何时被释放。现在这不应该成为问题,因为 KeyListener应该为我处理这个。

问题是,当我按住按键时,我会收到很多重复的 keyPressed()/keyReleased() 事件,而不仅仅是单个 keypressed()。有没有人有解决方案或变通方法来了解何时真正在 Linux 上发布 key ?

谢谢。

最佳答案

So the problem that I am having appears to be a bug that occurs only on Linux

是的,这是一个 Linux 问题。

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

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

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

关于java - 如何在 Swing 中停止重复的 keyPressed()/keyReleased() 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1736828/

相关文章:

java - 从 Stream Java 8 创建排序的 HashMap

java - 如何使用 Jsoup 在元素之前插入标签

java - 各个 Java 字节码的执行时间有多大差异?

c - 在 Linux 上,当使用 C 执行与端口 0(选择一个随机端口)的套接字绑定(bind)时,我得到 errno 98,Address already in use。这怎么可能?

java - 无法运行 JFrame

java - 如何清除 Java 中的 servlet 上下文

php - linux (ubuntu) apache www 文件夹访问问题

python - 如何使用 subprocess.call 命令在 Linux 终端中输入指向文件路径的字符串?

java - 如何动态更改 JFrame 内的 JPanel?

java - 每次单击时创建 JLabel 的新实例