SWT Fortschritt, GUI blockiert Abarbeitung

THO

Neues Mitglied
Hallo Experten. :)

Ich sitze an einem Programmierproblem, wo ich bisher noch keine Lösung für gefunden habe.
Für unser Studiumsprojekt überarbeiten wir eine Anwendung, welche auch mit Datenbankzugriffen etc arbeitet.

Für eine Aktion, die etwas länger dauert, möchte ich dem User einen Progress-Bar anzeigen. Soweit, so gut. Ich habe dafür jetzt das Beispiel JFace's ProgressMonitorDialog : JFace Dialog*«*SWT JFace Eclipse*«*Java so umgeschrieben:
Java:
import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.widgets.Shell;


public class WaitingDialog {

	IndeterminateRunningOperation operation;

        public static void main(String[] args) {
		
		System.out.println("vor dem anlegen");
		WaitingDialog wdlg = new WaitingDialog(new Shell(new Display()), "Anzeige");
		System.out.println("nach dem anlegen");
		wdlg.dispose();
		
	}

	public WaitingDialog(Shell shell, String text) {
		operation = new IndeterminateRunningOperation(text);

		try {
			new ProgressMonitorDialog(shell).run(true, false, operation);
		} catch (InvocationTargetException e) {
			MessageDialog.openError(shell, "Error", e.getMessage());
		} catch (InterruptedException e) {
			MessageDialog.openInformation(shell, "Cancelled", e.getMessage());
		}
	}


	public void dispose() {
		operation.setRunning(false);
	}

}
class IndeterminateRunningOperation implements IRunnableWithProgress {

	private static final int INCREMENT = 500;
	
	private String text;
	private boolean running = true;
	
	public void setRunning(boolean running) {
		this.running = running;
	}

	public IndeterminateRunningOperation(String textToDisplay) {
		text = textToDisplay;
	}

	public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
		monitor.beginTask(text, IProgressMonitor.UNKNOWN);
		
		while(running){
			Thread.sleep(INCREMENT);
			monitor.worked(INCREMENT);
		}
		
		monitor.done();
		
	}
}

Das Problem: nach dem Anlegen des Progress-Monitors läuft er in der Main-Methode nicht weiter.
Ich weiß, dass ich die zu erledigende Arbeit in die Run-Methode der Klasse IndeterminateRunningOperation schreiben könnte, aber genau das möchte ich nicht, da Die Datenbankzugriffe dann alle ausgelagert werden müssten und ich viel im Code der Ursprungsanwendung verändern müsste.

Was ich eigentlich erreichen möchte, ist folgendes:

Java:
                //Irgendwo im Hauptprogramm nach UserInteraktion auf Main-GUI
                //.....
		WaitingDialog wdlg = new WaitingDialog(mainShell, "Warte-Text");
		// Hier wird ganz viel getan
		//
		// Datenbankzugriffe usw.
		//
		// ...Arbeit ist erledigt, der Warte-Dialog kann geschlossen werden.
		wdlg.dispose();
		// ...

aber da er immer wartet, bis der Dialog geschlossen wurde, komme ich einfach nicht weiter, er führt erst gar nichts aus. Kann mir da wer weiterhelfen? :bahnhof:

Grüße
THO
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben