java事件队列事件调度刷新/陷阱事件

标签 java events swing dispatch

我有一个与设计相关的问题,我正在尝试寻找答案。

这是场景。

假设你想根据用户输入做一些昂贵(耗时)的事情(例如从某个数据库加载大量数据,读取大文件)。强烈推荐的方法是在单独的线程中完成耗时的工作,永远不要阻塞 EDT,否则 GUI 将变得无响应。

但是,在某些情况下,除非后台任务完成,否则您不应该向 GUI 提供输入。在我的具体情况下,只有在后台工作完成后,我才能确定哪些 GUI 元素应该可见和启用/禁用。只有那些应该可见和启用的 GUI 元素才应该响应用户输入,否则在我的特定情况下行为可能是不可预测的。

这就是我正在做的事情来处理这种情况。

第 1 步:在我开始一项耗时操作之前。

  1. 将光标更改为忙碌光标。
  2. 将鼠标监听器添加到组件顶级框架的玻璃面板。
  3. 使玻璃面板可见,以便它可以接收鼠标事件。玻璃板不会因鼠标输入而执行任何操作。

第二步:在后台线程中执行耗时操作。后台线程有一个 finally block ,当作业完成(完成或由于错误而中止)时通知事件线程。

第 3 步:

  1. 将鼠标光标切换回正常状态。
  2. 从玻璃面板中移除监听器。
  3. 使玻璃板不可见,以便鼠标事件到达预期的接收者。

这是处理此类情况的正确方法吗?

你们有什么推荐的?

最佳答案

SwingWorker可以在这种情况下使用。后台任务启动时可以禁用相关控件,并在done() 中重新启用。在这个相关examplerun 按钮可以在“Run”和“Cancel”之间切换。

附录:Java 1.5 的反向端口可用 here .

关于java事件队列事件调度刷新/陷阱事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6073469/

相关文章:

java.text.ParseException : Unparseable number: "ä¢è»ÅÒËÅèÍ"

java - 了解 JFrame 何时完全绘制

java - Eclipse Java 编辑器换行不符合预期

java - org.codehaus.groovy.grails.cli.support.GrailsS​​tarter 找不到错误

javascript - 为什么我无法按下 alt 键?

c++ - 事件系统的类型安全实现

java - 向导不重绘/重新验证 jframe

java - 如何创建隐藏其实现的 Java 库?

java - 有没有一种方法可以使用 MapStruct 运行程序,而无需每次都进行 Maven 全新安装?

cocoa - 在 Cocoa 应用程序 WebView 中捕获键盘事件