# ProgressMonitor in Wizards



## dzim (1. Jul 2009)

Tachchen,

ich bastel seit gestern an einem Wizard rum, der mir für die Generierung von Statistiken alle möglichen Daten zusammensammeln soll. Das stellt auch kein Problem dar.
Ich habe da nur mal eine Frage bezüglich der Option setNeedsProgressMonitor(true); die man im Wizard selbst (nicht in den WizardPages) angeben kann:
Wie, um Himmels willen, kann ich auf den ProgressMonitor zugreifen???

Natürlich könnte ich die DB-Operation, die hinerher kommen soll, auch in einen Kob legen, was mir die GUI sinnvollerweise auch nicht mit einem Wizard blockieren würde, der gerade Daten sammelt.
Aber wenn es so eine Option gibt, wäre es doch schön es auch zu nutzen!

Ich habe allerdings im Wizard keinen weiteren Hinweis gefunden, wie man den Monitor verwendet...

Wahrscheinlich stell ich mich nur zur blöd an und überseh es, aber trotzdem frag ich mal!

Viele Grüße und Danke


----------



## dzim (1. Jul 2009)

Ich hab mir das in meiner performFinish()-Methode mal so gedacht:

```
getContainer().run(true, true, new IRunnableWithProgress() {

				@Override
				public void run(IProgressMonitor monitor)
						throws InvocationTargetException, InterruptedException {

					performFinishOperation();
				}

			});
```

Aber ob das stimmt...


----------



## Koringar (1. Jul 2009)

Hi,

erstmal musst du unter der Klasse 'ApplicationWorkbenchWindowAdvisor' (falls du mit RCP arbeitest) den Workbench sagen das du dirs anzeigen lassen willst:

```
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setShowProgressIndicator(true);
```

Dann machst du ne nachdem wie du es verwenden willst, es wie dzim, übergibst deinem Thread oder Klasse den ProgressMonitor oder du arbeites mit der Job- API (was ich bevorzugen würde).
Wenn du dann dem ProgressMonitor hast kannste mit ihm arbeiten.

```
//Startet die Anzeige, ist in der rechten unteren Ecke so eine kleine Statusanzeige.
prozessMonitor.beginTask("Zugriff", 10);
//Zeigt noch einen unter Prozess an, ist praktisch bei größeren Jobs
prozessMonitor.subTask("Hole Daten aus Datenbank");
//Zeigt an das er schon was bestimmtes abgearbeiten hat z.b. eine bestimmte Datenmenge
prozessMonitor.worked(rowWorkedCount);
//Beendet den ProgressMonitor und sagt das er mit dem abarbeiten fertig ist
prozessMonitor.done();
```


----------



## dzim (1. Jul 2009)

Ok. Das erste hab ich schon getan, da ich ja Jobs sowieso schon verwende. Wie man den Monitor sagt, wie weit er ist (also mit dem worked(...)) ist klar. Na dann probier ich es einfach mal so, wie ich es oben schon beschrieben hab...

Danke jedenfalls!


----------

