package org.safehaus.penrose.studio.dialog; import org.eclipse.swt.widgets.Display; /** * @author Endi Sukma Dewata */ public class ProcessThread extends Thread { int max = 0; boolean closed = false; ProgressBarDialog progressBarDialog; public ProcessThread(ProgressBarDialog progressBarDialog, int max) { this.progressBarDialog = progressBarDialog; this.max = max; } public void run() { Display display = progressBarDialog.getShell().getDisplay(); progressBarDialog.doBefore(); for (final int[] i = new int[]{1}; i[0] <= max; i[0]++) { // final String info = progressBarDialog.process(i[0]); if (display.isDisposed()) return; display.syncExec(new Runnable() { public void run() { if (progressBarDialog.getProgressBar().isDisposed()) return; progressBarDialog.setMessage(info); progressBarDialog.setSelection(i[0]); if (i[0] == max || progressBarDialog.closed) { if (progressBarDialog.closed) { closed = true; progressBarDialog.cleanUp(); } progressBarDialog.getShell().close(); } } }); if (closed) break; } progressBarDialog.doAfter(); } }