eclipse e4 应用程序中的自定义错误对话框
Custom error dialog in eclipse e4 application
我正在尝试更改我们的 e4 应用程序的默认状态处理程序,因为我想向它添加完整的堆栈跟踪。
到目前为止,我将以下代码片段添加到插件 xml:
<extension
point="org.eclipse.ui.statusHandlers">
<statusHandler
class="our.test.StatusHandler"
id="custom_status_handler"/>
<statusHandlerProductBinding
handlerId="custom_status_handler"
productId="my_product.product">
</statusHandlerProductBinding>
</extension>
class our.test.StatusHandler 看起来如下:
public class StatusHandler extends AbstractStatusHandler {
@Override
public void handle(StatusAdapter statusAdapter, int style) {
System.out.println("Hello World");
}
}
但这似乎不起作用。默认错误对话框仍然显示,控制台中没有输出。
我已经看过 this 答案并使用 WorkbenchErrorHandler 而不是 AbstractStatusHandler,但它也不起作用。
StatusHandler 是 3.x 兼容模式,不用于纯 e4 应用程序。
您可以通过在应用程序上下文中添加 IEventLoopAdvisor
的实现来处理未处理的异常。 RCP 生命周期 class 的 @PostContextCreate
方法是执行此操作的好地方:
@PostContextCreate
public void postContextCreate(IEclipseContext context)
{
context.set(IEventLoopAdvisor.class, new EventLoopAdvisor(context));
...
}
class EventLoopAdvisor implements IEventLoopAdvisor
{
private final IEclipseContext _appContext;
EventLoopAdvisor(IEclipseContext appContext)
{
super();
_appContext = appContext;
}
@Override
public void eventLoopIdle(final Display display)
{
display.sleep();
}
@Override
public void eventLoopException(final Throwable exception)
{
// Report error
}
}
请注意eventLoopIdle
中对display.sleep()
的调用非常重要。
我正在尝试更改我们的 e4 应用程序的默认状态处理程序,因为我想向它添加完整的堆栈跟踪。
到目前为止,我将以下代码片段添加到插件 xml:
<extension
point="org.eclipse.ui.statusHandlers">
<statusHandler
class="our.test.StatusHandler"
id="custom_status_handler"/>
<statusHandlerProductBinding
handlerId="custom_status_handler"
productId="my_product.product">
</statusHandlerProductBinding>
</extension>
class our.test.StatusHandler 看起来如下:
public class StatusHandler extends AbstractStatusHandler {
@Override
public void handle(StatusAdapter statusAdapter, int style) {
System.out.println("Hello World");
}
}
但这似乎不起作用。默认错误对话框仍然显示,控制台中没有输出。
我已经看过 this 答案并使用 WorkbenchErrorHandler 而不是 AbstractStatusHandler,但它也不起作用。
StatusHandler 是 3.x 兼容模式,不用于纯 e4 应用程序。
您可以通过在应用程序上下文中添加 IEventLoopAdvisor
的实现来处理未处理的异常。 RCP 生命周期 class 的 @PostContextCreate
方法是执行此操作的好地方:
@PostContextCreate
public void postContextCreate(IEclipseContext context)
{
context.set(IEventLoopAdvisor.class, new EventLoopAdvisor(context));
...
}
class EventLoopAdvisor implements IEventLoopAdvisor
{
private final IEclipseContext _appContext;
EventLoopAdvisor(IEclipseContext appContext)
{
super();
_appContext = appContext;
}
@Override
public void eventLoopIdle(final Display display)
{
display.sleep();
}
@Override
public void eventLoopException(final Throwable exception)
{
// Report error
}
}
请注意eventLoopIdle
中对display.sleep()
的调用非常重要。