?

Log in

Previous Entry | Next Entry

Еще одна статья вышла. На этот раз - про синхронизацию пользовательского интерфейса. Про выполнение длительных задач так, чтобы не блокировать весь интерфейс. В последнее время что-то количество вопросов на эту тему превысило все разумные пределы.

В общем, статья тут: http://www.skipy.ru/technics/gui_sync.html. Читайте!

Все комментарии можно оставлять в этой теме.

Comments

ext_242636
Aug. 31st, 2010 06:08 pm (UTC)
GuiActionRunner из FEST
Иногда требуется обратное по отношению к SwingWorker'у: действие выполняется в background потоке, а надо получить какой-нибудь результат из swing'a.

Пример: выполняется запрос к серверу, возникает ошибка - надо спросить пользователя что делать: Retry/Abort. Я в таких случаях использую следующее:

boolean retry =
GuiActionRunner.execute(new GuiQuery() {
public Boolean executeInEDT() {
return JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(**);
}
});

Класс GuiActionRunner доступен в библиотеке FEST-swing (http://easytesting.org/). Единственный минус - библиотека предназначена для тестирования и использовать ее в production-коде страшновато.
skipy_ru
Sep. 1st, 2010 09:56 am (UTC)
Re: GuiActionRunner из FEST
Да, неплохо. Компактно. Близко к моему варианту с аннотацией, когда выполнение идет в синхронном режиме. А вообще, конечно, надо бы написать оболочку для подобных вызовов. Вызов invokeAndWait с Runnable - очень громоздко. Вот замыкания бы тут пригодились...