gpt4 book ai didi

java - 防止 AWT 事件队列过载

转载 作者:行者123 更新时间:2023-12-02 05:23:26 26 4
gpt4 key购买 nike

我编写了一个 Swing GUI,它在 JMenuItems 上使用 KeyAccelerators。长时间按下触发加速器的按键会导致 EventQueue 堆叠命令并阻塞 GUI。我希望 AWT 事件队列中不包含超过一(或两个)带有控制修饰符的 KeyEvent。我试过这个:

         AWTEvent awtevent = Toolkit.getDefaultToolkit()
.getSystemEventQueue().peekEvent();
if (awtevent != null) {
String paramString = awtevent.paramString();
if ((paramString.indexOf("modifiers=Ctrl") != -1 && ((KeyEvent) event)
.isControlDown())) {
((KeyEvent) event).consume();
} else if (paramString.indexOf("modifiers=Ctrl") != -1
&& (paramString.indexOf("keyChar=Undefined") != -1)) {
((KeyEvent) event).consume();

}
}

但它非常不可靠,因为它有时会消耗不应该消耗的事件。

最佳答案

您无法从外部可靠地执行此操作。从事件分派(dispatch)线程外部操作事件队列不是线程安全的,并且您无法在事件分派(dispatch)线程上执行与在处理该任务本身之前发布的事件混在一起的任务。您也许可以每隔一两秒将清理任务推送到队列中,以处理尚未处理的事件,但是......只是不这样做。

如果您想过滤 AWT/Swing 事件,那么您需要安装自己的事件队列,这比听起来更容易。您可能会发现this article具有指导意义。

关于java - 防止 AWT 事件队列过载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26305954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com