Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Eclipse RCP中重写getWorkbenchErrorHandler的意外行为_Java_Eclipse Rcp - Fatal编程技术网

Java 在Eclipse RCP中重写getWorkbenchErrorHandler的意外行为

Java 在Eclipse RCP中重写getWorkbenchErrorHandler的意外行为,java,eclipse-rcp,Java,Eclipse Rcp,我想我在代码中发现了一种薛定谔猫的问题。如果我更改了同一函数体中的一行,则该函数体永远不会执行;但是如果我不去管那一行,函数就会执行。不知何故,程序提前知道了身体是什么,并决定不称之为 我正在用Java开发一个EclipseRCP应用程序,需要使用它们的。根据链接的页面 将处理程序添加到处理流有两种方法 使用扩展点org.eclipse.ui.statusHandlers 由工作台顾问及其方法{@link WorkbenchAdvisorgetWorkbenchErrorHandler}执行。

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

我正在用Java开发一个EclipseRCP应用程序,需要使用它们的。根据链接的页面

将处理程序添加到处理流有两种方法

使用扩展点org.eclipse.ui.statusHandlers 由工作台顾问及其方法{@link WorkbenchAdvisorgetWorkbenchErrorHandler}执行。 因此,我进入了ApplicationWorkbenchHadVisor类,并重写了getWorkbenchErrorHandler方法:

MyStatusHandler的作用是充当委托处理程序的包装器。我以匿名的身份给这个班级命名。如上所述,此函数从未被调用。println永远不会发生,即使在带有断点的调试模式下,它们也不会触发。现在是wierd部分:如果我更改指定myErrorHandler的行

然后调用该函数;事实上,已经有好几次了


这个问题让我和两位精通java的同事感到困惑,所以我希望so的好人能帮助我们

事实证明,我的问题是MyErrorHandler类是在另一个插件中定义的,该插件可能尚未完全加载。这似乎并不完全正确,但一旦我将错误处理程序的类定义移动到启动时调用它的插件中,问题就消失了

@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;
}
myErrorHandler = delegate;