问题标签 [eventqueue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
8219 浏览

java - java swing清除事件队列

是否可以以标准方式执行此操作?

这是场景。

  1. 开始在 EDT 中做一些昂贵的事情(EDT 被阻塞,直到昂贵的操作结束)。

  2. 当 EDT 被阻止时,用户继续单击/拖动鼠标按钮。所有鼠标动作都记录在某处。

  3. 当 EDT 空闲时(用昂贵的东西完成),它开始处理鼠标事件。

我在步骤 3 中想要的是丢弃堆积的鼠标事件。在 EDT 空闲后,任何新的鼠标事件都应该以通常的方式处理。

关于如何实现这一目标的任何想法。

PS:我无法阻止 EDT 被阻塞(我无法控制程序中某些模块的行为)。

编辑:如果我可以安全地调用“SunToolkit.flushPendingEvents()”,那么我总是可以在 EDT 中开始昂贵的操作之前放置一个玻璃窗格。在 EDT 线程上的昂贵操作结束后,刷新所有事件 - 它们将进入一个不会做任何事情的玻璃窗格。然后让 EDT 正常工作。

EDIT2:我添加了一个 SSCCE 来演示这个问题。

  1. 运行 SSCCE

  2. 单击“等待 3 秒”按钮。它模拟了昂贵的操作。鼠标光标将变为忙。

  3. 当光标忙时,单击切换按钮“单击我”。如果在三秒后,切换按钮改变了它的状态,那么鼠标事件被切换按钮接收并且没有被捕获。

我希望当光标看起来很忙时,丢弃生成的鼠标(和其他)事件。

谢谢。

0 投票
1 回答
127 浏览

java - EventQueue 的 ID 不一致

我对以下显示 EventQueue 行为不一致的示例代码有疑问:

基本上,它获取事件队列线程的 ID,等待 5 秒然后再次获取 ID。

由于某种原因,ID 不匹配。显然,EventQueue 被销毁并重新创建。这是正常行为吗?这是在某处记录的吗?它是一个错误吗?即使是不同的实例,它不应该具有相同的ID吗?

如果我不执行Thread.sleep,则 ID 将匹配。

我的另一个问题是:我怎样才能解决这个问题?我正在使用一个只能在创建线程上访问的对象。如果这恰好是事件队列(不一定是),我必须能够检查它是否仍然是事件队列。

0 投票
2 回答
1000 浏览

java - 获取 Runnable 的当前实例

我正在制作一个允许用户查看存储在不同数据库中的任务列表的应用程序。所以发生的事情是,我有一个可浏览数据库的名称列表(存储为文本文件)。程序加载该列表中的第一个数据库并显示内容。然后从一个菜单中,我允许用户在列表中选择另一个数据库。(有点像,我想查看安迪的任务,现在是鲍勃,现在是卡尔......)。

问题是,我不知道如何更新 UI 以便显示新数据库的内容。删除当前列出的任务,从数据库中读取,然后重新填充是微不足道的。但是我无法访问此代码(来自我的 Singleton 数据库驱动程序),因为我需要访问已加载到 EventQueue 的 Runnable 实例(我的所有 JComponent 都是私有的,就像我迄今为止遇到的所有教程一样)。我正在查看 EventQueue 中的 get/peek 方法,但它们似乎不是我需要的,因为它们返回 AWTEvents,而且除了 java.lang.Object 之外,我没有看到 AWTEvent 和 Runnable 之间的任何关系。

那么,是否有可能获得当前的 Runnable?如何?

提前感谢您的任何指导。

0 投票
2 回答
787 浏览

java - NetBeans 的 HintsController 和 EventQueue

我们正在构建一个基于 Netbeans 平台的应用程序,其中一部分是我们使用的特定语言的编辑器。

我们有以下类来突出语法中的错误:

}

引发异常的违规代码是:

根据搜索结果,改成如下:

以下是在编辑器中引入语法错误时发生的情况:

发生的情况是,在 EDT(EventDispatch 线程)中调用 HintsController。但是,Annotations.addAnnotation() 正在另一个线程中运行 - 有时在“系统剪贴板同步器”线程中,有时在“非活动请求处理器”线程中。因为它检查它是否在 EDT 上运行,所以它总是抛出一个 IllegalStateException。

我不是使用 Netbeans 平台的专家,而且我对公司的这个特定应用程序还很陌生——所以我可能会遗漏一些非常明显的东西。谷歌没有太大帮助。有人有什么建议吗?

0 投票
0 回答
1236 浏览

javascript - Node.js 事件队列优先级

我正在编写一个 Node.js 应用程序 - 长话短说 - 根据用户在网站上的活动/位置确定不同 IO 进程的优先级。到目前为止,一切都运行良好 - 重要的排队项目首先运行,而不太重要的项目稍后运行。

棘手的部分是一次有很多事情发生——用户登录,用户转到不同的页面,用户做一些需要立即处理的事情,等等。在大多数情况下,我并不担心 Node.js 如何管理事件队列,但在某些情况下我是。我正在想象这样一种情况,我的事件队列中有一大堆东西(可能是因为一堆 IO 批处理刚刚返回,正在等待处理),并且用户在我的网站上执行了需要的操作立即 IO 请求,然后在该请求返回时立即处理。

我从未编写过需要我真正担心缩放的 Node.js 应用程序,因此我对它以正确顺序处理我的事件的能力不是 100% 有信心。担心这是一件愚蠢的事情吗?Node.js 处理事情的速度会如此之快,以至于我永远不会真正注意到阻塞,还是很有可能随着我的扩展,我会开始看到正在处理的重要事情出现严重延迟?

如果这是一个合理的担忧,Node.js 中是否有任何接口可以手动确定事件队列的优先级?

更新:

@Ricardo Tomasi 在评论中提出了一个很好的观点,如果我的应用程序真的是 CPU 密集型的,它可能不属于 Node.js。这让我意识到我的应用程序确实不是 CPU 密集型的,并且可能会运行良好。

为了进一步向自己证明这一点,我做了一个小基准测试:

我只有不到 200,000 个循环,这足以向我证明我没有什么可担心的。但是,我仍然想知道是否有任何方法可以手动管理 Node.js 事件队列。有人知道吗?

0 投票
3 回答
1022 浏览

java - Java API“如果不在 EDT 上,则在 EDT 上运行”

只是对我拥有的一些重复代码进行思考:

这不是很烦人,但似乎有一些专有功能可以为你检查这个,虽然我还没有找到它。

0 投票
2 回答
72 浏览

java - 如何判断我的 JComponent 是否正在接收来自软件的重绘调用?

我试图缩小我的 JComponent 不重绘的原因。奇怪的是,我可以重绘以在鼠标按下和释放时工作,但不能在拖动时工作。有没有办法打印出 EventQueue 或验证 PaintEvent 是否已执行或转储?让我知道,谢谢。

0 投票
3 回答
2592 浏览

java - EventQueue.invokeLater vrs SwingUtilities.invokeLater

有人可以强调这两者之间的差异以及两者都是必需的实例吗?!

我有一个应用程序可以同时使用两者,但想知道一个是否比另一个更好。显然他们都接受Runnable object,所以对我来说 - 我想我可以使用我喜欢的那个。

为什么这两个相似的函数在不同的类中?我知道一个是awt,另一个是Swing,但他们不做同样的事情吗?

0 投票
2 回答
240 浏览

java - 如何在 GUI 线程之间共享信息?

我正在编写一个带有 GUI (Swing) 的客户端应用程序。我的两个类 ClientClass 和 MainFrame 正在运行不同的线程,但需要相互调用方法。ClientClass 在应用程序生命周期的某个时间点在 EventQueue 线程 (displayGUI()) 上实例化 GUI (MainFrame)。ClientClass 包含许多方法,例如从客户端类线程调用的 recv(),用于更新 MainFrame。反过来,MainFrame 具有由事件触发的方法,例如按下按钮调用 ClientClass 中的方法。我假设 EventQueue 线程正在调用示例中处理按钮按下的烦人方法?

我很确定这种应用程序非常普遍,我很喜欢其他人的见解。我有一种感觉,我正在做的事情不是线程安全的,那么我该如何修复/改进这个应用程序的当前模型?

示例代码:

MainFrame.java:

客户端类.java:

0 投票
4 回答
986 浏览

java - AWTEvent 和 EventQueue

我有一个外部设备一次向我发送 1 个字符的数据。我正在将其写入 JTextPane 上的 StyledDocument。此数据在不是 AWT 线程的线程上发送给我,因此我需要创建 AWTEvents 并将它们推送到 EventQueue 以便 AWT 处理写入,这样我就不会收到异常。

我现在有一个有趣的问题...

我的文本正在向后打印到文档。

这显然是因为我在收到字符时一次将字符推送到事件队列 1。一个队列显然是最后推送的,首先是弹出的。我正在尝试一种可以在添加新事件或类似事件之前触发事件的方法,以便我可以按顺序触发事件。

http://www.kauss.org/Stephan/swing/index.html是我用来创建事件的示例。