SWT Time-Consuming Operation UI Pattern : SWT Thread « SWT « Java Tutorial





SWT does not allow non-UI threads to access user interface components directly.

Thread operationThread = new Thread() {
        public void run() {

            // time-consuming operations

            display.asyncExec/syncExec(new Runnable() {
                public void run() {

                // UI Updating procedures go here ...

                }
            });
        }
    };

    operationThread.start();
SWT Time-Consuming Operation UI Pattern
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class AsyncExecDisplay {
  static Display display = new Display();

  public static void main(String[] args) {
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    

    final Button buttonAsyncExec = new Button(shell, SWT.PUSH);
    buttonAsyncExec.setText("start");
    buttonAsyncExec.addSelectionListener(new SelectionListener() {
      public void widgetDefaultSelected(SelectionEvent e) {
      }

      public void widgetSelected(SelectionEvent e) {
        buttonAsyncExec.setText("Calculation in progress ...");
        getTask2(buttonAsyncExec).start();
      }
    });

    shell.open();
    while (!shell.isDisposed()) { // Event loop.
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }

  public static Thread getTask2(Button button) {
    final Button theButton = button;
    return new Thread() {
      public void run() {

        try {
          Thread.sleep(6000);
        } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }

        display.asyncExec(new Runnable() {
          public void run() {
            theButton.setText("done");
          }
        });
      }
    };
  }

}

Professional Java Interfaces with SWT/JFace by Jackwind Li Guojie John Wiley & Sons 2005











17.117.SWT Thread
17.117.1.SWT Time-Consuming Operation UI PatternSWT Time-Consuming Operation UI Pattern