Problem with wait() method

package progx2.progressdialog;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.concurrent.Semaphore;

import org.eclipse.jface.resource.ImageDescriptor;

import org.eclipse.jface.resource.ImageRegistry;

import org.eclipse.swt.SWT;

import org.eclipse.swt.custom.CLabel;

import org.eclipse.swt.dnd.Clipboard;

import org.eclipse.swt.events.SelectionAdapter;

import org.eclipse.swt.events.SelectionEvent;

import org.eclipse.swt.graphics.Image;

import org.eclipse.swt.layout.FillLayout;

import org.eclipse.swt.layout.GridData;

import org.eclipse.swt.layout.GridLayout;

import org.eclipse.swt.widgets.Button;

import org.eclipse.swt.widgets.Composite;

import org.eclipse.swt.widgets.Dialog;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Label;

import org.eclipse.swt.widgets.ProgressBar;

import org.eclipse.swt.widgets.Shell;

import com.sun.corba.se.impl.orbutil.concurrent.Mutex;

/**

* progress bar dialog.

* the first, you must know your app execute times,

* you need implement two method:

*

* process(int times);

* initGuage();

*

* you can implements method:

*

* cleanUp()

* doBefore()

* doAfter()

* @author yin_zhiguo

* yin_zhiguo@hotmail.com

*

*/

public abstract class ProgressBarDialog extends Dialog {

private Label processMessageLabel; //info of process finish

private Button cancelButton,buttonPause,buttonResume; //cancel button

private Composite cancelComposite;

private Label lineLabel;//

private Composite progressBarComposite;//

private CLabel message;//

private ProgressBar progressBar = null; //

private Object result; //

private Shell shell; //

private Display display = null;

protected volatile boolean isClosed = false;//closed state

protected int executeTime = 50;//process times

protected String processMessage = "process......";//procress info

protected String shellTitle = "Progress..."; //

protected Image processImage = SWTUtil.getImageOfMessage();//image

protected boolean mayCancel = true; //cancel

protected int processBarStyle = SWT.SMOOTH; //process bar style

ProcessThread prth;

boolean waitpls=true;

public void setMayCancel(boolean mayCancel) {

this.mayCancel = mayCancel;

}

public void setExecuteTime(int executeTime) {

this.executeTime = executeTime;

}

public void setProcessImage(Image processImage) {

this.processImage = processImage;

}

public void setProcessMessage(String processInfo) {

this.processMessage = processInfo;

}

public ProgressBarDialog(Shell parent) {

super(parent);

}

public abstract void initGuage();

public Object open() {

createContents(); //create window

shell.open();

shell.layout();

prth=new ProcessThread(executeTime);

prth.start();

Display display = getParent().getDisplay();

while (!shell.isDisposed()) {

if (!display.readAndDispatch()) {

display.sleep();

}

}

return result;

}

protected void createContents() {

shell = new Shell(getParent(), SWT.TITLE | SWT.PRIMARY_MODAL);

display = shell.getDisplay();

final GridLayout gridLayout = new GridLayout();

gridLayout.verticalSpacing = 10;

shell.setLayout(gridLayout);

shell.setSize(483, 181);

shell.setText(shellTitle);

final Composite composite = new Composite(shell, SWT.NONE);

composite.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));

composite.setLayout(new GridLayout());

message = new CLabel(composite, SWT.NONE);

message.setImage(processImage);

message.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));

message.setText(processMessage);

progressBarComposite = new Composite(shell, SWT.NONE);

progressBarComposite.setLayoutData(new GridData(GridData.FILL,

GridData.CENTER, false, false));

progressBarComposite.setLayout(new FillLayout());

progressBar = new ProgressBar(progressBarComposite, processBarStyle);

progressBar.setMaximum(executeTime);

processMessageLabel = new Label(shell, SWT.NONE);

processMessageLabel.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false));

lineLabel = new Label(shell, SWT.HORIZONTAL | SWT.SEPARATOR);

lineLabel.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false));

cancelComposite = new Composite(shell, SWT.NONE);

cancelComposite.setLayoutData(new GridData(GridData.END,

GridData.CENTER, false, false));

final GridLayout gridLayout_1 = new GridLayout();

gridLayout_1.numColumns = 2;

cancelComposite.setLayout(gridLayout_1);

buttonPause=new Button(cancelComposite, SWT.NONE);

buttonPause.setText("Pause");

buttonPause.setLayoutData(new GridData(78, SWT.DEFAULT));

buttonPause.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent e) {

// try {

//buttonPause.setText("Resume");

//prth.shouldStop=true;

if(buttonPause.getText().equals("Pause"))

{

buttonPause.setText("Resume");

synchronized(prth)

{

while(waitpls){

try {

prth.wait();

} catch (InterruptedException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

// prth.suspend();

// buttonPause.setText("Resume");

}

else

{

if(buttonPause.getText().equals("Resume"))

{

//prth.resume();

//buttonPause.setText("Pause");

}

}

//} catch (InterruptedException e1) {

//// TODO Auto-generated catch block

//e1.printStackTrace();

//}

//System.out.println(isClosed);

}

});

/* buttonResume=new Button(cancelComposite, SWT.NONE);

buttonResume.setText("Resume");

buttonResume.setLayoutData(new GridData(78, SWT.DEFAULT));

buttonResume.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent e) {

synchronized(prth){

// try {

//buttonPause.setText("Resume");

//prth.shouldStop=true;

prth.resume();

//} catch (InterruptedException e1) {

//// TODO Auto-generated catch block

//e1.printStackTrace();

//}

}

//System.out.println(isClosed);

}

});*/

cancelButton = new Button(cancelComposite, SWT.NONE);

cancelButton.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent e) {

isClosed = true;

//System.out.println(isClosed);

}

});

cancelButton.setLayoutData(new GridData(78, SWT.DEFAULT));

cancelButton.setText("cancel");

cancelButton.setEnabled(this.mayCancel);

}

protected abstract String process(int times);

protected void cleanUp()

{

}

protected void doBefore()

{

}

protected void doAfter()

{

}

class ProcessThread extends Thread {

private int max = 0;

private volatile boolean shouldStop = false;

ProcessThread(int max) {

this.max = max;

}

public void run() {

doBefore();

for (final int[] i = new int[] {1}; i[0] <= max; i[0]++)

{

//

final String info = process(i[0]);

if (display.isDisposed()) {

return;

}

display.asyncExec(new Runnable() {

public void run() {

if (progressBar.isDisposed()) {

return;

}

//

processMessageLabel.setText(info);

//

progressBar.setSelection(i[0]);

//

if (i[0] == max || isClosed) {

if (isClosed) {

shouldStop = true;//

cleanUp();//

}

shell.close();//

}

}

});

if (shouldStop) {

break;

}

}

doAfter();

}

}

public void setShellTitle(String shellTitle) {

this.shellTitle = shellTitle;

}

public void setProcessBarStyle(boolean pStyle) {

if(pStyle)

this.processBarStyle = SWT.SMOOTH;

else

this.processBarStyle = SWT.NONE;

}

}

class DemoProgressBar extends ProgressBarDialog {

private String[] info = null;

public DemoProgressBar(Shell parent) {

super(parent);

}

@Override

public void initGuage() {

info = new String[100];

for (int i = 0; i < info.length; i++) {

info = "process task " + i + ".";

}

this.setExecuteTime(100);

this.setMayCancel(true);

this.setProcessMessage("please waiting....");

this.setShellTitle("Demo");

}

@Override

protected String process(int arg0) {

try{

Thread.sleep((long)(Math.random() * 300));

}catch(Exception e){e.printStackTrace();}

return info[arg0 - 1];

}

}

class SWTUtil {

private static ImageRegistry imageRegistry = new ImageRegistry();

private static Clipboard clipboard = new Clipboard(Display.getCurrent());

private static final String IMAGE_Of_MESSAGE = "";

static{

imageRegistry.put(IMAGE_Of_MESSAGE, ImageDescriptor.createFromURL(newURL("file:icons/info2.gif")));

}

private SWTUtil(){}

public static URL newURL(String url_name) {

try {

return new URL(url_name);

} catch (MalformedURLException e) {

throw new RuntimeException("Malformed URL " + url_name, e);

}

}

public static void registryImage(String id, String urlName)

{

imageRegistry.put(id, ImageDescriptor.createFromURL(newURL(urlName)));

}

public static Image getImage(String id)

{

return imageRegistry.get(id);

}

public static Clipboard getClipboard() {

return clipboard;

}

public static Image getImageOfMessage()

{

return imageRegistry.get(IMAGE_Of_MESSAGE);

}

}

class PBDialogDemo extends Shell {

public static void main(String args[]) {

try {

Display display = Display.getDefault();

PBDialogDemo shell = new PBDialogDemo(display, SWT.SHELL_TRIM);

shell.open();

shell.layout();

while (!shell.isDisposed()) {

if (!display.readAndDispatch())

display.sleep();

}

} catch (Exception e) {

e.printStackTrace();

}

}

public PBDialogDemo(Display display, int style) {

super(display, style);

createContents();

}

protected void createContents() {

setText("ProgressBar Dialog");

setSize(218, 98);

setLayout(new FillLayout());

final Button openProgressbarDialogButton = new Button(this, SWT.NONE);

openProgressbarDialogButton.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent e) {

DemoProgressBar dpb = new DemoProgressBar(PBDialogDemo.this);

dpb.initGuage();

dpb.open();

}

});

openProgressbarDialogButton.setText("Open ProgressBar Dialog");

}

protected void checkSubclass() {

}

}

This is my program code.Here when I am clicking on the pause button the entire UI(including all the elements) are being unaccessable.Please Help me urgently...

[11648 byte] By [neo_the_onea] at [2007-11-26 15:21:20]
# 1
http://forum.java.sun.com/help.jspa?sec=formattingI'm not trying to find my way through this pile.Anyway, I bet that you stop the AWT thread. So no surprise the GUI won't get updated.
CeciNEstPasUnProgrammeura at 2007-7-8 21:36:06 > top of Java-index,Java Essentials,Java Programming...