# Fenster Fehlermeldung Ecplipse RCP



## konbs (19. Jun 2010)

Hey!

ich schreibe gerade ein Eclipse RCP Plugin und erweitere den ImportWizart. Der Benutzer kann einige XML Dateien auswählen und Importprozess auslösen. Hier können unterschiedliche Fehler auftreten, die ich gerne dem Benutzer anzeigen würde.

Mein ersten Ansatz, das direkte Anzeigen der Fehlermeldung ohne separaten Thread. Leider war im Hintergrund immer noch das Job-Fenster zu sehen. Der aktuelle Ablauf (mit Thread siehe unten) ist super, leider ist Fenster nicht an Eclipse gebunden. Ich hätte es gerne, dass der Benutzer erst die Meldung bestätigen muss, bevor es weiter gehen kann.


```
@Override
	public boolean performFinish() {
		final String path = this.one.getPath();

		final Job job = new Job("Import XML Files in: " + path) {
			@Override
			protected IStatus run(IProgressMonitor monitor) {
				final List<String> errorMessage = ImportXml.perform(path);
				new Thread() {
					public void run() {
						Shell shell = new Shell(display);
						MessageBox messageBox = new MessageBox(shell,
								SWT.ICON_WARNING | SWT.OK);
						messageBox.setText("Warning");
						StringBuilder sb = new StringBuilder();
						for (String string : errorMessage) {
							sb.append("- ").append(string).append("\n");
						}
						messageBox.setMessage(sb.toString());
						int buttonID = messageBox.open();
					}

				}.start();
				return Status.OK_STATUS;
			}
		};

		job.setUser(true);
		job.schedule();
		return true;
	}
```


----------



## maki (19. Jun 2010)

Mehrere Modale Messageboxen haben den Effekt, dass der User irgendwann nur noch auf OK klickt ohne zu lesen worum eigentlich geht...

Würde es denn reichen die Fehlermeldungen im Standard Eclipse Log View anzuzeigen?


----------



## konbs (19. Jun 2010)

Modal wäre schöner, habe nicht viele Fehlermeldungen.


----------



## maki (19. Jun 2010)

Dann solltest du deinen eigenen Thread weglassen.


----------



## konbs (19. Jun 2010)

Ohne Thread blockiert das Fenster mit den Fehlermeldung das Job-Fenstern. So habe ich Eclipse -> Job Fenster -> Fehlermeldungsfenster (als Ebenen betrachtet)

Ich stelle mir den Ablauf so vor:

- Job Fenster aktiv ...
- Fehler beim importieren des Import tritt auf -> Job Fenster wird geschlossen
- Fenster mit der Fehlermeldung wird geöffnet (modular)

Danke.

kon


----------



## Wildcard (19. Jun 2010)

Der Wizard Container kann selbst background Tasks ausführen und bring bereits alles mit um den Benutzer über Fehler zu informieren.
Hab die Methodennamen gerade nicht im Kopf, aber in etwa:

```
setNeedsProgressBar(true) // beim initialisieren des Wizards
getWizardContainer().run(new RunnableWithProgress...
setError
setMessage
```


----------



## konbs (21. Jun 2010)

Hey Wildcard,

danke für die Antwort. Bei meinem ImportWizard habe ich nur ein Page, somit führe ich den Import in der performFinish() Methode des Wurzel-ImportWizard aus. Anschließend wird das Fenster sofort geschlossen und Fehlermeldungen bekommt der Benutzer nicht mit. 

Eine Idee wäre es, ein weiter Page einzubauen und den Import durch Page1 ausführen zu lassen. Oder gibt es evlt. eine andere Lösung? Danke.

Viele Grüße,

Kon


----------



## @x.l (21. Jun 2010)

Und was spricht gegen die Verwendung von ErrorDialog?


----------



## Wildcard (21. Jun 2010)

in performFinish gibst du false zurück wenn ein Fehler auftritt, dann wird der Wizard auch nicht beendet.


----------

