java - 快速关键速率管理我的 Java Swing 应用程序,如何在管道中尽早删除事件?

标签 java swing events

某些操作系统生成 keyPressed 事件的速度比我的应用程序处理它们的速度快。我的第一个想法是,如果调用距离太近,则不执行该操作,如下所示:

public void actionPerformed(ActionEvent e) {
    long now = System.currentTimeMillis();
    if(now - lastCall < 150) {
        System.out.println("dropping event");
    }
    else {
        lastCall = now;
    }
}

不幸的是,尽管事件被丢弃,应用程序仍然锁定并在队列中积累大量事件。有没有办法可以将事件降低到较低级别?我认为当他们到达上面的操作监听器时,已经太晚了,无法使应用程序免于锁定。 感谢您的帮助!

编辑:我还应该提到监听器是与菜单项关联的 AbstractAction 的一部分。

最佳答案

如果您的应用程序无法及时响应按键,我会将耗时的部分移出带外并在单独的线程中进行处理。

然后,您可以根据需要构建按键队列和垃圾箱重复项等,或对其执行其他智能过滤。这都是特定于应用程序的,但其核心似乎是您在 GUI 事件处理中进行了繁重的处理。

关于java - 快速关键速率管理我的 Java Swing 应用程序,如何在管道中尽早删除事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143415/

相关文章:

events - 虚拟事件多重绑定(bind)未按预期工作

java - 引用HTML文件中的servlet以获取Tomcat中的.war文件

java - 应用程序在后台运行?

java - GWT 用左键和右键移动按钮

Java - 将 JButton 数组添加到 JFrame

javascript - 将单击事件分配给 Image 对象

java - 如何同时打开两个ServerSocket

java - JButtons 未显示在 JFrame 上的 JPanel 上

java - 在 Swing 中创建方形按钮

Java Swing 事件