SWT ProgressBar

Hallo zusammen,

habe dieses Beispiel zu einer ProgressBar zwar schon einmal eingestellt, aber noch keine Lösung bekommen (oder selbst gefunden :smile:

Das Problem ist, dass die ProgressBar während der Berechnung anhält.

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;

/**
*
* Klasse zum Test der ProgressBar-Funktionalität
*
*/
public class ProgressTest {

Display display;

private Shell shell;

Composite upComposite;

Composite downComposite;

ProgressBar pb;

ProgressBar pb2;

Label label;

/**
*
*/
public ProgressTest() {
this.display = new Display();
this.shell = new Shell();
this.shell.setText(„ProgressTest“);
this.shell.setSize(400, 200);
createGUI();
this.shell.open();
while (!this.shell.isDisposed()) {
if (!this.display.readAndDispatch())
this.display.sleep();
}
}

private void createGUI() {
this.shell.setLayout(new GridLayout());

/**
* oben
*/
this.upComposite = new Composite(this.shell, SWT.BORDER);
this.upComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
this.upComposite.setLayout(new GridLayout(1, false));

Button goButton = new Button(this.upComposite, SWT.FLAT);
goButton.setText(„GO“);
goButton.setLayoutData(new GridData(80, 20));
goButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
process_go();
}
});
this.pb = new ProgressBar(this.upComposite, SWT.SMOOTH);
this.pb.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
this.pb.setMaximum(100);
this.pb.setMinimum(0);

this.pb2 = new ProgressBar(this.upComposite, SWT.SMOOTH
| SWT.INDETERMINATE);
this.pb2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
/**
* unten
*/
this.downComposite = new Composite(this.shell, SWT.BORDER);
this.downComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
this.downComposite.setLayout(new GridLayout(1, false));

this.label = new Label(this.downComposite, SWT.NONE);
this.label.setLayoutData(new GridData(GridData.FILL_BOTH));
this.label.setText(„press „GO“ to start“);
}

protected void process_go() {
this.label.setText("…");
double summe = berechnen();
this.label.setText("Summe: " + Math.round(summe));
}

/**
* @return int
*
*/
public double berechnen() {
Berechnung myBerechnung = new Berechnung(this);
this.display.syncExec(myBerechnung);
return myBerechnung.getSum();
}

/**
* @param value
*/
public void neueAnzeige(final int value) {
this.display.asyncExec(new Runnable() {
public void run() {
ProgressTest.this.pb.setSelection(value);
}
});

}

/**
* @param args
*/
public static void main(String[] args) {
new ProgressTest();
}
}

/**
*
* Berechnung: Runnable
*
*/
class Berechnung implements Runnable {

private ProgressTest myTest;

private double sum = 1;

/**
*
* @param myTest
*/
public Berechnung(ProgressTest myTest) {
this.myTest = myTest;
}

public void run() {
for (int i = 0; i