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

Eclipse 2022-09中E4 Handler调用MessageDialog触发Widget disposed异常求助

Eclipse 2022-09中MessageDialog点击OK触发Widget is disposed异常的解决办法

问题场景

执行以下代码弹出错误对话框,点击OK按钮时抛出Widget is disposed异常,且所有对话框均存在该问题,仅在Eclipse 2022-09版本中出现:

public void execute(Shell shell, @Named(IServiceConstants.ACTIVE_PART) MPart aPart,
            @Named(IServiceConstants.ACTIVE_SELECTION) @Optional List<?> selection) {

    MessageDialog.openError(shell, "Error", "test");
}

异常栈

org.eclipse.swt.SWTException: Widget is disposed
    at org.eclipse.swt.SWT.error(SWT.java:4918)
    at org.eclipse.swt.SWT.error(SWT.java:4833)
    at org.eclipse.swt.SWT.error(SWT.java:4804)
    at org.eclipse.swt.widgets.Widget.error(Widget.java:450)
    at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:369)
    at org.eclipse.swt.widgets.Button.getSelection(Button.java:623)
    at org.eclipse.e4.ui.css.swt.dom.ButtonElement$1.widgetSelected(ButtonElement.java:37)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4251)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4068)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3645)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:823)
    at org.eclipse.jface.window.Window.open(Window.java:799)
    at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:609)
    at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:405)
    at org.eclipse.jface.dialogs.MessageDialog.openError(MessageDialog.java:491)

问题分析

从异常栈可见,异常由org.eclipse.e4.ui.css.swt.dom.ButtonElement模块触发:对话框关闭时按钮控件已被销毁,但CSS监听逻辑仍尝试调用Button.getSelection()方法,导致控件已释放的错误。这是Eclipse 2022-09版本中CSS SWT桥接模块的已知bug。

解决方案

  • 临时规避:切换到非CSS主题(如Eclipse Classic主题),关闭主题的CSS渲染功能。操作路径:Window > Preferences > General > Appearance,选择Classic主题后重启Eclipse。
  • 彻底修复:升级Eclipse到2022-12或更高版本,该bug在后续版本中已被官方修复。
  • 自定义样式排查:若使用了自定义CSS样式,移除所有针对Button的自定义规则,测试是否为样式冲突导致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:45:50