// Window must be made visible before calling this. static void disposeWindowOnClick(final Window window) { AWTEventListener l = new AWTEventListener { public void eventDispatched(AWTEvent evt) { if (!window.isVisible()) { //print("disposeWindowOnClick: Forgetting listener"); Toolkit.getDefaultToolkit().removeAWTEventListener(this); ret; } if (!evt instanceof MouseEvent) ret; O source = evt.getSource(); if (source == window && evt.getID() == MouseEvent.MOUSE_PRESSED) { Toolkit.getDefaultToolkit().removeAWTEventListener(this); window.dispose(); } } }; Toolkit.getDefaultToolkit().addAWTEventListener(l, AWTEvent.MOUSE_EVENT_MASK); }