首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java事件队列事件分派刷新/陷阱事件

java事件队列事件分派刷新/陷阱事件
EN

Stack Overflow用户
提问于 2011-05-20 14:35:51
回答 1查看 1.4K关注 0票数 3

我有一个与设计有关的问题,我正试图找到一个答案。

这是一个场景。

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

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

这就是我为处理这种情况所做的事情。

第一步:在我即将开始一个耗时的操作之前。

  1. 将光标更改为繁忙的游标。
  2. 将鼠标侦听器添加到组件顶层框架的玻璃结构中。
  3. 使glasspane可见,以便它可以接收鼠标事件。作为鼠标输入的结果,glasspane不会做任何事情。

步骤2:在后台线程中执行耗时的操作.后台线程有一个finally块,它在作业完成时通知事件线程(由于错误完成或中止)。

第3步:

  1. 将鼠标光标切换回正常状态。
  2. 从玻璃窗格中删除监听器。
  3. 使glasspane不可见,这样鼠标事件就会转到预期的收件人那里。

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

你们有什么建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-20 17:49:26

SwingWorker可以在这个上下文中使用。在done()中启动并重新启用后台任务时,可以禁用相关控件.在这个相关的示例中,run按钮的条件是在"Run“和"Cancel”之间切换。

增编:这里提供了Java1.5的后端端口。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6073469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档