Может быть, это тривиально, я изо всех сил пытаюсь понять простую документацию по SwingWorker.
Вот скопированный контент
Рабочий процесс
В жизненном цикле SwingWorker участвуют три потока:
Текущий поток: в этом потоке вызывается метод execute(). Он планирует SwingWorker для выполнения в рабочем потоке и немедленно возвращается. Можно дождаться завершения работы SwingWorker, используя методы get.
Рабочий поток: в этом потоке вызывается метод doInBackground(). Именно здесь должны происходить все фоновые действия. Чтобы уведомить PropertyChangeListeners об изменениях связанных свойств, используйте методы firePropertyChange и getPropertyChangeSupport(). По умолчанию доступны два связанных свойства: состояние и ход выполнения.
Поток отправки событий: все действия, связанные с Swing, происходят в этом потоке. SwingWorker вызывает методы process и done() и уведомляет все прослушиватели PropertyChangeListeners в этом потоке.
Часто текущий поток является потоком отправки событий.
--
Рабочий поток не является EDT, поэтому код в doInBackground() не должен обращаться к элементам GUI. Правильно ли я понимаю?
Предыстория: у нас есть небольшой код, который использует SwingWorker, но doInBackground() создает FileChooser и вызывает setCurrentDirectory()
. Я подозреваю, что это приводит меня к исключению почти так же, как http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6637181 (11 – Закрыто, это не дефект)