如何使用 IEventBroker 发送事件

How to Send Events with IEventBroker

简单问题:我正在再次评估 E4,并想用 IEventBroker 发送一个简单的事件。多个教程指出这是要走的路:

@Inject
private IEventBroker eventBroker;

this.eventBroker.send("org.acme.event", myEventObject);

然而所有的人都不知道如何将"org.acme.event"注册为主题,所以我不会得到这个例外:

Caused by: java.lang.IllegalArgumentException: invalid topic: org.acme.event
at org.osgi.service.event.Event.validateTopicName(Event.java:236)
at org.osgi.service.event.Event.<init>(Event.java:78)
at org.eclipse.e4.ui.services.internal.events.EventBroker.constructEvent(EventBroker.java:153)
at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:79)

使用 IEventBroker 发送事件的完整方法是什么?

您不必注册活动主题。

事件主题名称由 OSGi 规范定义(IEventBroker 是 OSGI EventAdmin 的简化接口)。

这里的问题是主题名称的部分只允许'A-Z'、'a-z'、'0-9'、'_'和'-'。部分使用“/”而不是“.”分隔。所以 'org/acme/event' 就可以了。