void () { synchronized (getLock()) { LOG.assertTrue(!myStoppedAlready); super.stop(); UIUtil.invokeLaterIfNeeded(() -> { if (myDialog != null) { myDialog.hide(); } synchronized (getLock()) { myStoppedAlready = true; } Disposer.dispose(this); }); SwingUtilities.invokeLater(EmptyRunnable.INSTANCE); // Just to give blocking dispatching a chance to go out. } }