我在compat层Eclipse RCP应用程序中引导IEventBroker
。
我有两种观点:Triggerer
和Receiver
。
Triggerer
(摘录):
private IEventBroker eventBroker = PlatformUI.getWorkbench().getService(IEventBroker.class);
btn.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = viewer.getStructuredSelection();
List selectionList = selection.toList();
for (Object s : selectionList) {
if (s instanceof MyObject) {
matches.add(s);
}
}
eventBroker.send(MyEventConstants.TOPIC_OBJECT_CHANGED, matches);
}
}
Receiver
(摘录):
@Override
public void handleEvent(Event event) {
Object data = event.getProperty(EVENT_DATA);
switch (event.getTopic()) {
case MyEventConstants.TOPIC_OBJECT_CHANGED:
try {
if (data instanceof ArrayList) {
List<MyObject> matches = null;
try {
matches = (List<MyObject>) data;
}
catch (ClassCastException e) {
}
Subthing sub = buildSubthing(matches);
getContentViewer().getContents()
.setAll(Collections.singletonList(sub));
}
}
break;
}
}
buildSubthing
对相应的接收数据进行处理,并将其设置为GEF4编辑器的内容。
在某些情况下,这种情况很好,有些则不然。
handleEvent()
被触发不止一次,虽然event
hashCode总是相同的,我不明白为什么。主题是相同的,数据也是相同的。但是,buildSubthing
只是暂停了一些数据,而不是其他数据。在这两种情况下,数据结构相同。
我如何控制调用handleEvent
的频率,因为我认为调用的次数是Subthing
有时未正确构建的原因?