Eclipse SWT java.lang.StackOverflower错误:为什么我的侦听器执行多次?

Eclipse SWT java.lang.StackOverflower错误:为什么我的侦听器执行多次?,java,eclipse,eclipse-plugin,swt,swt-awt,Java,Eclipse,Eclipse Plugin,Swt,Swt Awt,我正在开发eclipse插件。我在eclipse插件上创建了一个扩展点。我添加了一个下拉列表。因此,我实现了一个侦听器,以了解值何时更改并执行我的逻辑。下面是扩展点的片段: import java.util.ArrayList; 导入java.util.array; 导入java.util.List; 导入org.eclipse.emf.ecore.EObject; 导入org.eclipse.jface.viewers.ArrayContentProvider; 导入org.eclipse

我正在开发eclipse插件。我在eclipse插件上创建了一个扩展点。我添加了一个下拉列表。因此,我实现了一个侦听器,以了解值何时更改并执行我的逻辑。下面是扩展点的片段:


import java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入org.eclipse.emf.ecore.EObject;
导入org.eclipse.jface.viewers.ArrayContentProvider;
导入org.eclipse.jface.viewers.ComboViewer;
导入org.eclipse.jface.viewers.iSelectChangedListener;
导入org.eclipse.jface.viewers.IStructuredSelection;
导入org.eclipse.jface.viewers.SelectionChangedEvent;
导入org.eclipse.jface.viewers.StructuredSelection;
导入org.eclipse.swt.events.ModifyEvent;
导入org.eclipse.swt.events.ModifyListener;
导入org.eclipse.swt.layout.FormAttachment;
导入org.eclipse.swt.layout.FormData;
导入org.eclipse.swt.widgets.Composite;
导入org.eclipse.swt.widgets.Control;
导入org.eclipse.swt.widgets.Label;
导入org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
导入org.eclipse.uml2.uml.Enumeration;
导入org.eclipse.uml2.uml.NamedElement;
公共类MyNewAbsection扩展了取代{
私有ComboViewer ComboViewer;
私有ISelectionChangedListener组合ViewerSelectionListener;
私有标签myLabel;
private final static List myValues=新的ArrayList(Arrays.asList(“FIRST”、“TWO”、“THREE”);
公共静态类筛选器扩展了AbstractFilter{
公共过滤器(){
超级();
}
}
@凌驾
public void createControls(复合父级,TabbedPropertySheetPage TabbedPropertySheetPage){
super.createControls(父级,选项卡属性表页);
addLabel();
addComboViewer();
@凌驾
受保护的void addListeners(){
addSelectionChangedListener(getComboViewerSelectionListener());
}
@凌驾
受保护的void RemovelListeners(){
removeSelectionChangedListener(getComboViewerSelectionListener());
}
@凌驾
受保护的布尔接受元素(EObject元素){
返回枚举的元素实例;
}
私有void addComboViewer(){
FormData数据;
comboViewer=新的comboViewer(复合);
数据=新表单数据();
data.left=新格式附件(myLabel,10);
data.top=新格式附件(15110);
comboViewer.getCombo().setText(“”);
comboViewer.getCombo().setLayoutData(数据);
setContentProvider(新的ArrayContentProvider());
comboViewer.setInput(myValues);
}
私有void addReferenceTypeCombo(){
FormData数据;
comboViewer=新的comboViewer(复合);
数据=新表单数据();
data.left=newformattachment(myLabel,10);//10110
数据宽度=100;
data.top=新格式附件(15110);
comboViewer.getCombo().setText(“”);
comboViewer.getCombo().setLayoutData(数据);
setContentProvider(新的ArrayContentProvider());
NomenculationPeView[]值=NomenculationPeView.values();
comboViewer.setInput(myValues);
}
私有void addLabel(){
FormData数据;
命名标签=新标签(复合,0);
数据=新表单数据();
data.left=新格式附件(10110);
data.top=新格式附件(15110);
myLabel.setLayoutData(数据);
myLabel.挫折背景(白色);
myLabel.setText(“我的标签文本”);
}
私有ISelectionChangedListener getComboViewerSelectionListener(){
if(comboViewerSelectionListener==null){
comboViewerSelectionListener=新的ISelectionChangedListener(){
@凌驾
公共作废selectionChanged(SelectionChangedEvent事件){
IsStructuredSelection=(IsStructuredSelection)事件。getSelection();
Object firstElement=selection.getFirstElement();
最终字符串值=firstElement.toString();
Object firstElementA=comboViewer.getElementAt(0);
if(firstElement!=null){
comboViewer.setSelection(新结构选择(firstElement));
}
//一些逻辑
}
};
}
返回comboViewerSelectionListener;
}
@凌驾
受保护的输入(EOObject元素){
this.element=(NamedElement)元素;
}
@凌驾
受保护的void resetInternalInput(){
this.element=null;
}   
}
当我点击选项卡时,我可以看到带有我的值(1、2、3)的下拉列表。但是当我选择列表中的一个值时,侦听器会运行很多次。这很奇怪,因为我只选择了一次值。 它多次运行侦听器代码,直到出现以下异常:

!消息未处理的事件循环异常
!堆栈0
栈溢出
位于org.eclipse.swt.widgets.Control.windowProc(Control.java:3877)
位于org.eclipse.swt.widgets.Combo.windowProc(Combo.java:2058)
位于org.eclipse.swt.widgets.Display.windowProc(Display.java:4545)
位于org.eclipse.swt.internal.win32.OS.SendMessageW(本机方法)
位于org.eclipse.swt.internal.win32.OS.sendmages(OS.java:3012)
位于org.eclipse.swt.widgets.Combo.select(Combo.java:1386)
在org.eclipse.jface.viewers.ComboViewer.listSetSelection上(ComboViewer.java:212)
位于org.eclipse.jface.viewers.AbstractListViewer.setSelectionToWidget(AbstractListViewer.java:513)
在org.eclipse.jface.viewers.StructuredViewer.setSelectionToWidget上(StructuredViewer.java:1680)
在org.eclipse.jface.viewers.Structu上