1

我正在使用 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 */
    }
}

然而,在管道的这一端没有收到任何东西。我做错了什么或者我怎么能调试这个?

4

1 回答 1

0

上面的代码看起来不错,但请尝试检查以下问题:

  • 检查接收器对象是否已创建 - 如果没有,它将不会接收事件
  • 检查接收器对象是否由 Eclipse 框架创建(例如,如果它是应用程序模型的元素,例如部件、处理程序,它肯定是由框架创建的) - 如果不是,则框架(选择服务)不知道接收器反对并且不能通知它
于 2012-09-13T08:19:22.460 回答