【问题标题】:RCP overrided Composite dispose method not called未调用 RCP 覆盖的复合处置方法
【发布时间】:2015-09-30 13:51:39
【问题描述】:

我通过在 e4 应用程序中扩展 Composite 类创建了自己的复合复合材料。

然后我重写了 dispose 方法,但它永远不会被调用。但是,如果我在我的复合组合上添加一个 dispose 侦听器,或者它包含侦听器的任何小部件都会被调用。

有人能解释一下我的原因吗?

这是一个例子。

public class MyComposite extends Composite{
public MyComposite(){
    this.addDisposeListener(new DisposeListener(){

        @Override
        public void widgetDisposed(DisposeEvent e) {
            System.out.println("This get printed");
        }
    });
}

@Override
public void dispose(){
    System.out.println("This is not printed");
    super.dispose();
}
}

我已经阅读了 dispose 方法的 javadoc,它说:

注意:此方法不会在接收者的后代上递归调用。这意味着,小部件实现者无法通过重新实现此方法来检测小部件何时被释放,而是应该监听 Dispose 事件。

对于我看到的行为和上面的 javadoc,似乎 dispose 方法不能被覆盖,因为它被忽略了。这种解释正确吗?

【问题讨论】:

    标签: swt eclipse-rcp rcp


    【解决方案1】:

    对于我看到的行为和上面的 javadoc,似乎 dispose 方法不能被覆盖,因为它被忽略了。这种解释正确吗?

    “不能被覆盖”太强了,因为从技术上讲你可以覆盖它,但基本上你是正确的。如您所见,覆盖它并没有达到预期的效果。

    要在 Composite 中处理处置,DisposeListener 是正确的方法。另请参阅此问题:Eclipse RCP: How and when to correctly unsubscribe a Composite from EventBroker?

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      相关资源
      最近更新 更多