1

Eclipse 4.2 Juno、Java 1.6 を使用しています。アプリケーションには 2 つの部分があります。1 つの部分は、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 に答える