[SWT] Shell schließen abfangen (über 'x')

gerritka

Mitglied
Hi

hab es mit nem ShellListener (windowClosed) versucht, jedoch kann man zum einen das Schließen nicht abbrechen und wenn während dem Schließen über 'x' noch Threads mit GUI Veränderung laufen gibts eine Widget disposed Exception.

Danke für eure Hilfe!
 
Hallo!

Schau doch mal hier:
Code:
/*
 * Created on 27.04.2005@13:24:45 by Darimont
 *
 * TODO Licence info
 */
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;

/**
 * @author Darimont
 * 
 * TODO Explain me
 */
public class SWTCloseExample {

	static Thread runner = new Thread() {
		public void run() {
			for (int i = 0; i < 100; i++) {
				try {
					sleep(100L);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	};

	public static void main(String[] args) {
		Display display = new Display();
		final Shell shell = new Shell(display);

		shell.setText("SWTCloseExample");
		shell.open();

		runner.start();

		shell.addShellListener(new ShellAdapter() {
			public void shellClosed(ShellEvent e) {
				if (runner.isAlive()) {
					e.doit = false;

					MessageBox box = new MessageBox(shell, SWT.ICON_INFORMATION);
					box.setText("Information");
					box
							.setMessage("Some *very* importent processes have not been finished yet...!\nTry again later...");
					box.open();
				}
			}
		});

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}
}

Gruß Tom
 
Danke!

Hatte mich auch irgendwie an der Namensgebeung festgehangen. Das kling so abgeschlossen ;) (shellClosed im Gegensatz zu windowClosing bei Swing)
 
Zurück