某些操作系统生成 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/