首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在循环中处理其他GUI事件

在循环中处理其他GUI事件
EN

Stack Overflow用户
提问于 2013-06-30 22:14:10
回答 2查看 1.1K关注 0票数 1

我正在编写一个Java7 Swing应用程序,它调用非GUI类在循环中执行某些操作。不幸的是,当循环运行时,我不能与GUI交互。是否可以在该循环中强制处理GUI事件?

我正在搜索一些东西,告诉JVM在继续循环之前处理其他GUI事件,比如按钮单击。

Java 7 Swing中有没有我想要的东西,或者我真的必须自己处理多线程(我还没走那么远……)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-30 22:21:16

不要阻塞EDT (事件调度线程)-当这种情况发生时,GUI将“冻结”。实现一个用于重复任务的Swing Timer或一个用于长时间运行的任务的SwingWorker,而不是调用Thread.sleep(n)。有关更多详细信息,请参阅Concurrency in Swing

票数 7
EN

Stack Overflow用户

发布于 2013-06-30 22:17:25

使用SwingWorker。基本上,所有UI事件处理总是在单个特定的线程上完成,称为事件调度线程,在该线程中执行任何其他操作都会阻止UI事件(鼠标单击、键盘输入等)被处理,从而使UI“挂起”。

SwingWorker类被添加到JRE中,专门用于“在后台”(而不是在UI线程中)执行耗时的任务,它允许您轻松地在其他地方执行繁重的任务,可以有选择地以一定的时间间隔更新UI (考虑进度条),也可以在完成后更新UI。您只需覆盖特定的方法(doInBackground()done())就可以做到这一点,而不需要直接处理线程。

SwingWorker Javadoc page提供了开始使用它所需的一切,包括示例代码。

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

https://stackoverflow.com/questions/17391239

复制
相关文章

相似问题

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