2015-12-20 44 views
0

在我的Eclipse RCP E4应用程序,我使用的注解得到通知时,部分被激活,使用这里提出的办法: http://www.vogella.com/tutorials/Eclipse4ModelEvents/article.html的Eclipse RCP E4部分激活事件多次发送

@Inject 
@Optional 
public void  subscribeTopicPartActivation(@UIEventTopic(UIEvents.UILifeCycle.ACTIVATE) Event event) { 

    Object element = event.getProperty(EventTags.ELEMENT); 
    if (!(element instanceof MPart)) { 
    return; 
    } 

    MPart part = (MPart) element; 

    System.out.println("Part activated: " + part.getLabel()); 
} 

它的工作原理很好,但我注意到,在我们期望单个激活事件(即例如简单切换到零件...)的情况下,对于同一部分,激活事件被不止一次地触发。发送的事件消息似乎完全相同(相同的目标,相同的主题)。我错过了什么吗?这是事件框架的正常行为吗?

回答

0

是的,这似乎是正常的。这两个事件之间的部分的'标记'值有所不同。在第二个事件中,“活动”已被添加到标签。

这将示区别:

System.out.println("part " + part.getElementId() + " tags " + 
      part.getTags().stream().collect(Collectors.joining(", "))); 

您还可以使用EPartServiceaddPartListener方法来监听只是部分的变化。

+0

谢谢Greg。有时候我们会有3个激活事件(一个没有标签,另外两个激活标签...)。无论如何,这是奇怪的。 – FH35

+0

据我可以看到,这个事件生成的唯一地方是在'activate'方法的'org.eclipse.e4.ui.internal.workbench.PartServiceImpl'(实现'EPartService')。你将不得不跟踪代码,看看它是如何工作的。 –