Quando si dispone di un bus evento asincrono filo, e gli eventi del fuoco, diciamo all'interno del modello che vengono catturato nell'interfaccia utente probabilmente avete il seguente problema:modo migliore per combinare guava EventBus e AWT gestione degli eventi
La sede il gestore viene eseguito in un thread di lavoro, ma tutte le modifiche allo swing dell'interfaccia utente devono essere eseguite all'interno del thread di eventi AWT. Ciò significa che è necessario inserire tutti i clodi del gestore in EventQueue.invokeLater(...)
.
Questo assomiglia molto al codice della piastra della caldaia. Mi chiedo se esiste una soluzione più intelligente per questo problema.
Che dire di un'estensione del bus di eventi guava che contrassegna un gestore per l'esecuzione all'interno di un thread speciale? Questo potrebbe essere contrassegnato con un annotion, ad es. @ExecuteWithinEDT
:
class EventBusChangeRecorder {
@Subscribe @ExecuteWithinEDT void recordCustomerChange(ChangeEvent e) {
recordChange(e.getChange());
}
}
Ciao, lo stesso come con il mio altro commento al post di cui sopra: tutti gli eventi sono ora spediti in AWT. Quello che volevo era un modo in cui ogni singolo abbonato poteva decidere di inviare o meno in AWT. In caso contrario, un bus evento asincrono non avrebbe senso in un'app reale. – langm