лучший способ комбинировать обработку потока событий guava и AWT.

Когда у вас есть асинхронная шина событий и запускаются события, допустим, внутри модели, которая улавливается в пользовательском интерфейсе, у вас, вероятно, возникает следующая проблема:

Зарегистрированный обработчик запускается в рабочий поток, но все изменения UI Swing должны выполняться в потоке событий AWT. Это означает, что вам нужно заключить все ваши обработчики в EventQueue.invokeLater (...) .

Похоже, это очень много кода шаблона. Интересно, есть ли более разумное решение этой проблемы.

Как насчет расширения шины событий guava, которое помечает обработчик для выполнения в специальном потоке? Это может быть отмечено аннотацией, например @ExecuteWithinEDT :

class EventBusChangeRecorder {
  @Subscribe @ExecuteWithinEDT void recordCustomerChange(ChangeEvent e) {
    recordChange(e.getChange());
  }
}
11
задан Xaerxess 1 March 2012 в 16:58
поделиться