11 Stimmen

beste Möglichkeit zur Kombination von Guava Eventbus und AWT Event Thread Handling

Wenn Sie einen asynchronen Ereignisbus haben und Ereignisse auslösen, sagen wir innerhalb des Modells, die in der Benutzeroberfläche abgefangen werden, haben Sie wahrscheinlich das folgende Problem:

Der registrierte Handler wird in einem Worker-Thread ausgeführt, aber alle UI-Swing-Änderungen müssen innerhalb des AWT-Ereignis-Threads ausgeführt werden. Das bedeutet, dass Sie alle Ihre Handler-Klone in EventQueue.invokeLater(...) .

Das sieht nach einer Menge Standardcode aus. Ich frage mich, ob es eine intelligentere Lösung für dieses Problem gibt.

Wie wäre es mit einer Erweiterung des Guava-Eventbusses, die einen Handler für die Ausführung in einem speziellen Thread markiert? Dies könnte z.B. mit einer Annotation markiert werden. @ExecuteWithinEDT :

class EventBusChangeRecorder {
  @Subscribe @ExecuteWithinEDT void recordCustomerChange(ChangeEvent e) {
    recordChange(e.getChange());
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X