Eclipse rcp RCP SelectionService的侦听器未考虑IIInputSelectionProvider

Eclipse rcp RCP SelectionService的侦听器未考虑IIInputSelectionProvider,eclipse-rcp,Eclipse Rcp,我有一个不同观点的RCP应用程序。这些视图应该通过Eclipse SelectionService相互交互。 在视图1中,我添加了一个带有 getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this.listener); 在视图2中,我添加了一个带有 getSite().setSelectionProvider(此); 为了实现这一点,我从视图2中的IIInputSelectionProvide

我有一个不同观点的RCP应用程序。这些视图应该通过Eclipse SelectionService相互交互。 在视图1中,我添加了一个带有

getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this.listener);
在视图2中,我添加了一个带有

getSite().setSelectionProvider(此);
为了实现这一点,我从视图2中的IIInputSelectionProvider实现了这些方法。运行程序时,不会调用view 1s selection listener。调试后,, 我发现视图1没有添加到视图2的侦听器列表中。在视图2中,我有一个方法

private ListenerList listenersList=new ListenerList();
@凌驾
public void addSelectionChangedListener(ISelectionChangedListener ISelectionChangedListener){
//TODO自动生成的方法存根
添加(iselectionchangedlistener);
}
它将侦听器添加到IIInputSelectionProvider。我的问题是:谁应该调用这个方法。我的理解是Eclipse SelectionService应该使用

getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this.listener);
但它不起作用。我必须自己填写听众名单吗?如果是,为什么我必须使用SelectionService? 或者我必须通过调用任何其他方法而不使用列表来迭代侦听器列表吗?因为如果我检查ISelectionService对象

ISelectionService服务=getSite().getWorkbenchWindow().getSelectionService()

我看到了所有的听众。
但它们不属于上述列表的一部分。

每次激活视图时,都会调用addSelectionChangedListener,当视图不再处于活动状态时,会将其删除。这意味着:如果视图A处于活动状态并且调用了“setElement”,则会通知正在侦听的所有视图。如果这些观点本身称为“选举”,那么什么也不会发生。没有启动通知。

您正在呼叫
ISelectionProvider.setSelection
?是的,我在呼叫。我使用以下实现:@Override public void setSelection(final-ISelection-ISelection){Object listeners[]=listenersList.getListeners();for(int I=0;I