automatische Fehlermeldung bei UIJobs deaktivieren

musiKk

Top Contributor
Guten Tag,

es geht um Eclipse RCP.

Ich habe einen UIJob erstellt, der Sachen macht und im Fehlerfall einen eigenen Status zurückgibt. Grob gesehen ist das sowas wie
Java:
public IStatus runInUIThread(IProgressMonitor monitor) {
	try {
	// blurgh
	} catch(final BlurghException e) {
		IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID,
			"Error during blurgh", e);
		return status;
	}
	return Status.OK_STATUS;
}
Wenn der Job den Fehlerstatus zurückgibt, wird von Eclipse automatisch eine Fehlermeldung geöffnet, die ähnlich dem ErrorDialog ist, also mit einer Fehlermeldung und einem Details-Knopf für die Exception (genau genommen ist es jedoch laut Plug-In Spy ein WorkbenchStatusDialogManager.InnerDialog).
Ich würde das gerne unterbinden, da ich den Fehler selbst anzeigen möchte. Bisher erscheinen dann beide Dialoge übereinander. Ich habe es bereits mit
Java:
StatusManager.getManager().handle(status, StatusManager.NONE);
probiert, aber das hat keine Wirkung gezeigt.

Wäre schön, wenn jemand eine Idee hat, wie man das lösen kann.

Gruß
mK
 

Wildcard

Top Contributor
Da es sich um RCP handelt wäre das sauberste den ganzen Error Handler auszutauschen. Dann wird statt dem generischen Dialog dein eigener angezeigt, allerdings auch für alle anderen Jobs. Wenn du das so haben willst, dann ist das der Weg, wenn du nur für einen bestimmten Job einen Dialog anzeigen willst, dann hast du zwei Möglichkeiten:

Du gibst ein eigenes Status Objekt zurück das OK, oder INFO, oder ähnliches zurückliefert damit der Eclipse Dialog nicht angezeigt wird.
Dort wo du den Fehler behandeln willst castest du dann entweder auf deinen konkreten Typ oder unterscheidest am Code, oder sonstwas ob du einen Dialog anzeigst.
Die dritte Möglichkeit ist den Dialog für diesen Job nicht sofort zu öffnen, allerdings bleibt er dann über die Progress View erreichbar.
Dazu dieses Job-Property of true setzen:
IProgressConstants (Eclipse Platform API Specification)
 

musiKk

Top Contributor
Ich gebe im Moment einfach mal [c]IStatus.WARNING[/c] zurück, da kommt per Default offenbar nix.

Der eigene ErrorHandler würde bei mir zum gleichen Problem führen. Ich schildere das mal kurz, wahrscheinlich gehe ich das sowieso falsch an...

Ich habe einen Dialog, der geöffnet und mit Daten gefüllt wird, die übers Netz übertragen werden. Das passiert im genannten Job. Dabei kann natürlich etwas schief gehen, daher wird im Fehlerfall der Fehlerstatus übergeben. Wenn ein solcher Fehler auftritt, soll der Dialog gleich wieder geschlossen werden, nachdem die Fehlermeldung mit OK bestätigt wurde. Der Dialog ist in dem Fall nämlich völlig unbrauchbar. Das mache ich über [c]cancelPressed()[/c]. In etwa
Java:
j.addJobChangeListener(new JobChangeAdapter() {
	@Override
	public void done(IJobChangeEvent event) {
		if (!event.getResult().equals(Status.OK_STATUS)) {
			cancelPressed();
		}
	}
});
j.schedule();
Nur damit reißt es die automatisch erzeugte Fehlermeldung auch weg. Daher soll das ganze synchron durchgeführt werden. Mit einem vor [c]cancelPressed()[/c] manuell gezeigten Fehler ([c]ErrorDialog.openError(...)[/c]) ist das sichergestellt.

Vielleicht gibts dafür ja eine tollere Standardlösung...
 

Ähnliche Java Themen


Oben