【问题标题】:Intercepting Eclipse e4 platform exceptions拦截 Eclipse e4 平台异常
【发布时间】:2015-04-27 15:39:04
【问题描述】:

使用 Eclipse RCP 3.x,可以创建自定义 AbstractStatusHandler 来拦截平台异常。一种方法是重写 ApplicationWorkbenchAdvisor 类中的 getWorkbenchErrorHandler() 方法,如下所示:

    @Override
    public synchronized AbstractStatusHandler getWorkbenchErrorHandler()
    {
        if (m_errorHandler == null)
        {
            m_errorHandler = new MyWorkbenchErrorHandler(this);
        }
        return m_errorHandler;
    }

在 Eclipse 论坛、stackoverflow 和 Lars Vogel Eclipse 4 书中进行了大量研究后,我无法找到使用 e4 的等效方法。

任何帮助将不胜感激。

【问题讨论】:

  • 所有使用它的东西似乎都在'org.eclipse.ui.xxx'插件中,所以它似乎根本不适用于e4。
  • @greg-449 这正是问题所在。全局错误处理是如此基本的功能,以至于我很难理解为什么我在 e4 上找不到有关如何执行此操作的信息
  • 这真的不是全局错误处理,它似乎只被 org.eclipse.ui 插件中的各种 UI 操作和对话框使用 - 在 e4 中不存在这些操作和对话框的等效项.

标签: eclipse-rcp e4


【解决方案1】:

您可以将我们自己的IEventLoopAdvisor 放入上下文中。执行此操作的好地方是您的生命周期处理程序中的 @PostContructCreate

context.set(IEventLoopAdvisor.class, new IEventLoopAdvisor() {
        @Override
        public void eventLoopException(Throwable exception) {
            ... handle exception here ...
        }

        ...
    });

如果上下文中没有IEventLoopAdvisor,平台将使用默认值。您可以在PartRenderingEngine 中看到平台是如何做到这一点的(在第 1102 行撰写本文时):

http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java

【讨论】:

  • 感谢您的回答。我们发现我们可以通过使用 Platform.addLogListener(...) 来实现我们想要的。通过这种方式,我们可以了解平台处理的异常情况。
  • IEventLoopAdvisorinternal 包中,因此不是官方 API 的一部分
猜你喜欢
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 2010-09-18
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
相关资源
最近更新 更多