Skip to content

Check for null when calling Menu#getShell #337

@ShahzaibIbrahim

Description

@ShahzaibIbrahim

Description
Recently a issue was reported in official repository about Menu#getShell being null and breaking org.eclipse.ui.examples.contributions when starting the runtime workspace with dark theme, See eclipse-platform/eclipse.platform.swt#2247. I am not able to reproduce the issue yet in my runtime workspace but i found similar issue when enabling org.eclipse.e4.ui.workbench.swt plugin in my runtime workspace.

Adding a stack trace here:

ENTRY org.eclipse.e4.ui.workbench.swt 4 2 2025-06-25 11:47:14.389
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.e4.ui.workbench.swt".
!STACK 0
java.lang.NullPointerException: Cannot invoke "org.eclipse.swt.widgets.Menu.getShell()" because the return value of "org.eclipse.swt.widgets.MenuItem.getMenu()" is null
	at org.eclipse.swt.widgets.MenuItem.calculateRenderedTextSize(MenuItem.java:1310)
	at org.eclipse.swt.widgets.MenuItem.wmMeasureChild(MenuItem.java:1253)
	at org.eclipse.swt.widgets.Control.WM_MEASUREITEM(Control.java:5260)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4820)
	at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:336)
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1494)
	at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2378)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:5128)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
	at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:504)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4881)
	at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:336)
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1494)
	at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2371)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:5128)
	at org.eclipse.swt.internal.win32.OS.BringWindowToTop(Native Method)
	at org.eclipse.swt.widgets.Decorations.bringToTop(Decorations.java:215)
	at org.eclipse.swt.widgets.Shell.open(Shell.java:1284)
	at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.postProcess(WBWRenderer.java:743)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1079)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1042)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:678)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:583)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:185)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:219)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:149)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:115)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:627)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1431)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1403)
	Suppressed: java.lang.NullPointerException: Cannot invoke "org.eclipse.swt.widgets.Menu.getShell()" because the return value of "org.eclipse.swt.widgets.MenuItem.getMenu()" is null
		... 44 more

JFYI, @fedejeanne

Probable places with this issue::

  • getMonitorZoom() : int - org.eclipse.swt.widgets.MenuItem
  • SetMenu(long, long, long) : int - org.eclipse.swt.ole.win32.OleFrame
  • TranslateAccelerator(long, int) : int - org.eclipse.swt.ole.win32.OleFrame
  • TranslateAccelerator(long, long, int) : int - org.eclipse.swt.browser.WebSite

Metadata

Metadata

Assignees

No one assigned

    Labels

    HiDPIA HiDPI-Related Issue or FeatureSWTIssue for SWT

    Type

    No type

    Projects

    Status

    ✅ Done

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions