Java 在Eclipse RCP中重写getWorkbenchErrorHandler的意外行为
我想我在代码中发现了一种薛定谔猫的问题。如果我更改了同一函数体中的一行,则该函数体永远不会执行;但是如果我不去管那一行,函数就会执行。不知何故,程序提前知道了身体是什么,并决定不称之为 我正在用Java开发一个EclipseRCP应用程序,需要使用它们的。根据链接的页面 将处理程序添加到处理流有两种方法 使用扩展点org.eclipse.ui.statusHandlers 由工作台顾问及其方法{@link WorkbenchAdvisorgetWorkbenchErrorHandler}执行。 因此,我进入了ApplicationWorkbenchHadVisor类,并重写了getWorkbenchErrorHandler方法: MyStatusHandler的作用是充当委托处理程序的包装器。我以匿名的身份给这个班级命名。如上所述,此函数从未被调用。println永远不会发生,即使在带有断点的调试模式下,它们也不会触发。现在是wierd部分:如果我更改指定myErrorHandler的行 然后调用该函数;事实上,已经有好几次了Java 在Eclipse RCP中重写getWorkbenchErrorHandler的意外行为,java,eclipse-rcp,Java,Eclipse Rcp,我想我在代码中发现了一种薛定谔猫的问题。如果我更改了同一函数体中的一行,则该函数体永远不会执行;但是如果我不去管那一行,函数就会执行。不知何故,程序提前知道了身体是什么,并决定不称之为 我正在用Java开发一个EclipseRCP应用程序,需要使用它们的。根据链接的页面 将处理程序添加到处理流有两种方法 使用扩展点org.eclipse.ui.statusHandlers 由工作台顾问及其方法{@link WorkbenchAdvisorgetWorkbenchErrorHandler}执行。
这个问题让我和两位精通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;