我正在使用 Eclipse 4.2 Juno、Java 1.6。我的申请中有两个部分。其中一部分是注册 SelectionChangedListener:
@Inject
private ESelectionService selectionService;
@PostConstruct
public void init() {
TreeViewer bsTreeViewer = new TreeViewer(tabFolder, SWT.BORDER);
/* some other stuff */
// Event declaration
bsTreeViewer.addSelectionChangedListener(new SelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
if( selectionService != null ) {
selectionService.setSelection(((IStructuredSelection)event.getSelection()).getFirstElement());
}
}
});
}
这个监听器被正确调用。第一个选定的元素也是正确的类型。
我的另一部分是设置接收端:
@Inject
public void setBS(@Named(IServiceConstants.ACTIVE_SELECTION) @Optional BS bs) {
if (bs == null) {
/* implementation not shown */
} else {
/* implementation not shown */
}
}
但是,管道的这一端没有收到任何信息。我做错了什么或者我该如何调试这个?
最佳答案
上面的代码看起来不错,但请尝试检查以下问题:
- 检查接收者对象是否已创建 - 如果没有,它将不会接收事件
- 检查接收者对象是否是由 Eclipse 框架创建的(例如,如果它是应用程序模型的元素,例如部件、处理程序,那么它肯定是由框架创建的) - 如果不是,框架(选择服务)不知道关于接收者对象并且无法通知它
关于java - ESelectionService 无法接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12365108/