在循环中处理其他GUI事件

wul*_*lxz 1 java swing

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

我正在寻找一些东西,告诉JVM在继续循环之前处理其他GUI事件,如按钮点击.

Java 7 Swing中是否存在我想做或做的事情,我自己必须弄乱多线程(我还没那么远......)?

And*_*son 7

不要阻止EDT(事件调度线程) - 当发生这种情况时,GUI将"冻结".而不是为重复任务或长时间运行的任务调用Thread.sleep(n)实现Swing .有关更多详细信息,请参阅Swing中的并发.TimerSwingWorker


rad*_*dai 5

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

SwingWorker类添加到JRE专门为"在后台"做耗时的任务(未在UI线程),并允许您轻松做你的繁重别的地方,可选更新间隔的UI(认为进度条)并且,再次可选地,一旦完成,就更新UI.您只需通过覆盖特定方法(doInBackground()done())来完成此操作,您就不需要直接处理线程.

SwingWorker类的Javadoc页有你需要开始使用它,包括示例代码的一切.