Mega Code Archive

 
Categories / Java Tutorial / SWT
 

SWT Time-Consuming Operation UI Pattern

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(); 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