Bug 331335 [Wizards] Bad implementation of IWizard's dispose() method can prevent the dialog from closing
If there is bad client code in an IWizard's dispose() method, the dialog get into a state where it cannot be closed. ------------ Run this code and try to close the wizard dialog, you will not be able to. Display display = new Display(); Wizard wizard = new Wizard() { public boolean performFinish() { return true; } public void dispose() { throw new RuntimeException(); } }; WizardDialog dialog = new WizardDialog(null, wizard); dialog.open(); display.dispose(); ------------ java.lang.RuntimeException at Main$5.dispose(Main.java:142) at org.eclipse.jface.wizard.WizardDialog.hardClose(WizardDialog.java:859) at org.eclipse.jface.wizard.WizardDialog.close(WizardDialog.java:484) at org.eclipse.jface.window.Window.handleShellCloseEvent(Window.java:741) at org.eclipse.jface.window.Window$3.shellClosed(Window.java:687) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:98)
bundles/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java
private ArrayList createdWizards = new ArrayList();
	
	private ArrayList nestedWizards = new ArrayList();
	
	private IWizardPage currentPage = null;
	
	private long activeRunningOperations = 0;
	/**
	 * The time in milliseconds where the last job finished. 'Enter' key presses are ignored for the
	 * next {@link #RESTORE_ENTER_DELAY} milliseconds.
	 * <p>
	 * The value <code>-1</code> indicates that the traverse listener needs to be installed.
	 * </p>
	 * 
	 * @since 3.6
	 */
	private long timeWhenLastJobFinished= -1;
	
	private boolean useCustomProgressMonitorPart= true;
	
	private String pageMessage;
	private int pageMessageType = IMessageProvider.NONE;
	private String pageDescription;
	
	private ProgressMonitorPart progressMonitorPart;
	private Cursor waitCursor;
	private Cursor arrowCursor;
	private MessageDialog windowClosingDialog;