可能这是微不足道的,我很难理解SwingWorker上的简单文档。
这是复制粘贴的内容
工作流程
SwingWorker 的生命周期涉及三个线程:
当前线程:在该线程上调用了 execute() 方法。它安排 SwingWorker 在工作线程上执行并立即返回。可以使用 get 方法等待 SwingWorker 完成。
工作线程:在该线程上调用 doInBackground() 方法。这是所有后台活动都应该发生的地方。要通知 PropertyChangeListener 绑定的属性更改,请使用 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-关闭,不是缺陷)