You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse 2020 09插件开发如何实现自定义错误处理器

你的自定义错误处理器没有生效的核心原因是没有向Equinox运行时完成注册配置,默认系统仍在调用内置的WorkbenchErrorHandler。以下是完整的实现和配置方案:

第一步:完成扩展点注册

打开你插件项目的plugin.xml文件,添加org.eclipse.ui.statusHandlers扩展点配置,示例如下:

<extension
      point="org.eclipse.ui.statusHandlers">
   <statusHandler
         class="de.audivw.jabaf.yourpackage.StatusHandler"
         id="de.audivw.jabaf.customStatusHandler"
         default="true">
   </statusHandler>
</extension>

注意把class属性值替换为你自己的StatusHandler类的全限定名,default="true"表示该处理器会覆盖系统默认的错误处理器。

第二步:优化现有实现代码

你当前的代码存在几个边界问题,调整后如下:

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.statushandlers.StatusAdapter;
import org.eclipse.ui.statushandlers.WorkbenchErrorHandler;

public class StatusHandler extends WorkbenchErrorHandler {

    private static final String TARGET_PLUGIN_ID = "de.audivw.jabaf";

    @Override
    public void handle(final StatusAdapter statusAdapter, final int style) {
        IStatus status = statusAdapter.getStatus();
        // 先判断是否是目标插件抛出的状态,不管是单条还是MultiStatus
        if (TARGET_PLUGIN_ID.equals(status.getPlugin())) {
            // 先校验Workbench已初始化,避免启动早期空指针
            if (PlatformUI.isWorkbenchRunning()) {
                PlatformUI.getWorkbench().getDisplay().asyncExec(() -> {
                    Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
                    ErrorDialog dialog = new ErrorDialog(shell, "Fehler", null, status,
                            IStatus.WARNING | IStatus.ERROR);
                    dialog.open();
                });
                return;
            }
        }
        // 非目标插件的错误走默认处理逻辑
        super.handle(statusAdapter, style);
    }
}

优化点说明:

  • 新增Workbench运行状态校验,避免插件启动阶段调用PlatformUI.getWorkbench()抛出空指针
  • 去掉了不必要的MultiStatus类型限定,单条错误状态也会被捕获处理
  • 精简了ErrorDialog的状态掩码,不需要展示OK、INFO级别的通知
  • 把插件ID提取为常量,降低维护成本
第三步:功能验证

在你的插件业务代码中主动触发一条错误测试是否生效:

import org.eclipse.core.runtime.Status;
import org.eclipse.ui.statushandlers.StatusManager;

// 测试触发错误
Status testStatus = new Status(IStatus.ERROR, TARGET_PLUGIN_ID, "测试自定义错误对话框");
StatusManager.getManager().handle(testStatus, StatusManager.SHOW);

运行插件后触发上述代码,即可看到你自定义的错误对话框弹出。

内容的提问来源于stack exchange,提问作者tobias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:06:03