【发布时间】:2012-02-17 12:05:45
【问题描述】:
这可能是微不足道的,我很难理解SwingWorker 上的简单文档。
这是复制粘贴的内容
工作流程
SwingWorker 的生命周期涉及三个线程:
当前线程:在该线程上调用了 execute() 方法。它 安排 SwingWorker 在工作线程上执行并返回 立即地。可以等待 SwingWorker 完成使用 获取方法。
工作线程:在该线程上调用 doInBackground() 方法。 这是所有后台活动都应该发生的地方。通知 关于绑定属性更改的 PropertyChangeListeners 使用 firePropertyChange 和 getPropertyChangeSupport() 方法。默认 有两个可用的绑定属性:状态和进度。
事件调度线程:所有与 Swing 相关的活动都发生在此 线。 SwingWorker 调用 process 和 done() 方法, 通知此线程上的任何 PropertyChangeListener。
通常,当前线程是事件调度线程。
--
工作线程不是 EDT,因此 doInBackground() 中的代码不得访问 GUI 元素。我的理解正确吗?
背景:
我们有使用 SwingWorker 的小代码,但使用 doInBackground() 创建 FileChooser 并调用 setCurrentDirectory()。我怀疑这导致我的异常与http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6637181 几乎相同(11-关闭,不是缺陷)
【问题讨论】:
标签: java swing swingworker event-dispatch-thread