【问题标题】:Unexpected behavior overriding getWorkbenchErrorHandler in Eclipse RCP在 Eclipse RCP 中覆盖 getWorkbenchErrorHandler 的意外行为
【发布时间】:2012-01-31 22:53:30
【问题描述】:

我想我在我的代码中发现了一种薛定谔的猫问题。如果我在同一函数的主体中更改一行,则永远不会执行函数的主体;但如果我不理会那行,函数就会执行。不知何故,程序提前知道身体是什么,并决定不调用它......

我正在使用 Java 开发 Eclipse RCP 应用程序,并且需要使用他们的 Error Handling System。根据链接的页面,

有两种方法可以将处理程序添加到处理流程中。

  • 使用扩展点 org.eclipse.ui.statusHandlers
  • 由工作台顾问及其方法 {@link WorkbenchAdvisor#getWorkbenchErrorHandler()}。

所以我进入了我的ApplicationWorkbenchAdvisor 类,并覆盖了getWorkbenchErrorHandler 方法:

@Override
public synchronized AbstractStatusHandler getWorkbenchErrorHandler()
{
    System.out.println("IT LIVES!");

    if (myErrorHandler == null)
    {
        AbstractStatusHandler delegate = super.getWorkbenchErrorHandler();
        MyStatusHandler otherThing = new MyStatusHandler(delegate);
        myErrorHandler = otherThing;
    }
    return myErrorHandler;
}

MyStatusHandler 旨在充当delegate 处理程序的包装器。我已经为匿名重新命名了这个类。如上所述,这个函数永远不会被调用。 println 永远不会发生,即使在带有断点的调试模式下,它们也不会触发。现在奇怪的部分:如果我将分配myErrorHandler 的行更改为

myErrorHandler = delegate;

然后调用函数;事实上,多次!

这个问题把我和两个精通java的同事都难住了,所以我希望SO的好人可以帮助我们!

【问题讨论】:

    标签: java eclipse-rcp


    【解决方案1】:

    事实证明,我的问题是 MyErrorHandler 类是在另一个插件中定义的,可能还没有完全加载。这似乎并没有完全加起来,但是一旦我将错误处理程序的类定义移动到启动期间调用它的同一个插件中,问题就消失了。

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 2016-09-16
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 2020-05-09
      • 1970-01-01
      相关资源
      最近更新 更多