Код обработки событий Swing выполняется в специальном потоке, известном как поток диспетчеризации событий.Большая часть кода, который вызывает методы Swing, также выполняется в этом потоке.Это необходимо, поскольку большинство методов объекта Swing не являются «поточно-ориентированными»: их вызов из нескольких потоков может привести к возникновению помех в потоке или к ошибкам согласованности памяти.doInBackground()
метод:
Вычисляет результат или выдает исключение, если не может этого сделать.
Затем он используется работником для выполнения некоторых задач, выполняяв рабочем потоке.
и о методе done()
:
Выполняется в потоке диспетчеризации событий после завершения метода doInBackground.Реализация по умолчанию ничего не делает.Подклассы могут переопределить этот метод для выполнения действий завершения в потоке диспетчеризации событий.Обратите внимание, что вы можете запросить статус внутри реализации этого метода, чтобы определить результат этой задачи или то, была ли эта задача отменена.
Обычно она используется для отображения окончательных результатов после doInBackground()
завершает свою работу.
Затем, я думаю, вы должны установить курсор на метод doInBackground()
SwingWorker, используя такой код:
public Void doInBackground() {
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
...
}
и отключить его на метод done()
SwingWorker,с:
public void done() {
setCursor(Cursor.getDefaultCursor());
...
}
Вы можете найти другую информацию об этих методах курсора в API класса Cursor .
Здесь страница с некоторым занятымпримеры кода курсора, здесь SO вопрос, связанный с курсором.