【发布时间】: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