package org.example; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; public class MenuExposeBug { public static void main(String[] args) { Display display = new Display(); final Shell shell = new Shell(display); shell.setText("MenuTest"); shell.setLayout(new FillLayout()); Menu menu = new Menu(shell, SWT.BAR); final MenuItem item1 = new MenuItem(menu, SWT.CASCADE); item1.setText("Menu1"); final MenuItem item2 = new MenuItem(menu, SWT.CASCADE); item2.setText("Menu2"); final Menu submenu = new Menu(shell, SWT.DROP_DOWN); item1.setMenu(submenu); for (int i = 0; i < 3; i++) { final MenuItem newItem = new MenuItem(submenu, SWT.NONE); newItem.setText("Dispose Item " + i); newItem.addListener(SWT.Selection, e -> newItem.dispose()); } final MenuItem newItem1 = new MenuItem(submenu, SWT.NONE); newItem1.setText("Dispose SubMenu"); newItem1.addListener(SWT.Selection, e -> submenu.dispose()); final MenuItem newItem2 = new MenuItem(submenu, SWT.NONE); newItem2.setText("Dispose MenuItem"); newItem2.addListener(SWT.Selection, e -> item1.dispose()); shell.setMenuBar(menu); shell.pack(); shell.setSize(400, 250); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } }