Я пишу приложение, которое выполняет свои действия с меню файла, используя SwingWorker
.Каждый вызываемый метод возвращает значение boolean
, которое сообщает, была ли операция успешно выполнена или нет.
В данный момент я использую ожидание результата в состоянии занятости, например:
public boolean executeOperation() {
final SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>() {
@Override
protected Boolean doInBackground() throws Exception {
// ..
if (aborted) {
return false;
}
// ..
return true;
}
};
worker.execute();
// busy wait
while (!worker.isDone())
;
try {
return worker.get().booleanValue();
} catch (Exception e) {
// handle exceptions ..
return false;
}
}
Есть ли менее интенсивный способ решения этой проблемы?
Непосредственное использование worker.get()
не сработает, так как блокирует EDT, ожидая завершения задачи - значениедаже диалоговые окна, которые я открываю из SwingWorker
, не будут окрашены.
РЕДАКТИРОВАТЬ: Если возможно, я бы хотел, чтобы метод (или рабочий) сообщал свой результат асинхронно.Я реализую несколько коротких методов (файл -> открыть, новый, закрыть, сохранить, сохранить как, выйти), которые зависят друг от друга (т. Е. Когда попытка выхода, закрытие вызовов, закрытие может вызвать сохранение, сохранение может вызвать сохранениекак).Кажется, что решение этой проблемы асинхронно усложняет код.