Есть ли способ обработать AWT-очередь из собственного метода? - PullRequest
1 голос
/ 22 марта 2011

Я видел вопрос от кого-то, кто не может / не хочет изменить долгосрочный метод, чтобы вернуть 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?

1 Ответ

0 голосов
/ 22 марта 2011

Нет смысла внедрять решение с верхом, если решение с правым краем уже существует. Метод должен быть выполнен как отдельный поток. Период.

...