Я видел вопрос от кого-то, кто не может / не хочет изменить долгосрочный метод, чтобы вернуть Future<Something>
вместо <Something>
.К сожалению, метод вызывается также из AWT-Thread с известными последствиями.Я сказал ему, что он делает глупости, но может быть возможность.Он мог запустить SwingWorker (или любой другой) изнутри своего метода и обработать AWT-очередь в ожидании его завершения.
Я имею в виду что-то вроде
public Something aLongRunningMethodCalledFromTheAwtThread() {
FutureTask<Something> future = new FutureTask<Something>(...);
EventQueue eventQueue = Toolkit.getEventQueue();
while (true) {
if (future.isDone()) return future.get();
AWTEvent event = eventQueue.getCurrentEvent();
if (event==null) {
waitForAWhile();
} else {
eventQueue.pop(); // <---- is protected
process(event); // <---- BUT HOW???
}
}
}
AFAIK, такие вещи выполняютсяв других фреймворках интересно, возможно ли это и в Swing / AWT?