# Progress monitor bei Job erscheint nicht



## bschaefer (16. Mai 2008)

Hallo, 

ich habe bei Eclipse RCP einen Job erzeugt, für den ich eine Fortschrittsanzeige erzeugen möchte. Laut Doku sollte _setUser(true)_ das bewirken, bei mir tut sich aber nichts. Der Job funktioniert, aber es gibt kein Fenster, in dem der Fortschritt angezeigt wird (Ich will nicht wirklich den Fortschritt anzeigen, mir gehts nur darum, dass das Fenster des Progress-Monitors aufgeht. Durch IProgressMonitor.UNKNOWN sollte es keine Prozent-Anzeige, sondern nur einen hin- und herwandernden Balken geben.)

Das hier ist der Job:

```
public class MyJob extends Job {
	
	public DetectionJob(String name) {
		super(name);
		setUser(true);
	}


	protected IStatus run(IProgressMonitor monitor) {
		try {
			monitor.beginTask("Running Job ...", IProgressMonitor.UNKNOWN);
			System.out.println("Job wird ausgeführt");
			Display.getDefault().asyncExec(new Runnable() {

				@Override
				public void run() {
					Action action = new JobFinishedAction();
					action.run();
				}});
			monitor.done();
			return new Status(Status.OK, 
					"myPlug-In", 
					"Job finished");
		} catch (Exception e) {
			return new Status(Status.ERROR, 
					"myPlug-In", 
					"An error occured during job");
		}
	}

}
```

Und so rufe ich ihn in einer _IWorkbenchWindowActionDelegate_ auf:

```
public void run(IAction action) {
		MyJob myJob = new MyJob("Job");
		detectionJob.schedule();
		
	}
```

Wenn jemand eine Idee hat, warum der Job im Hintergrund bleibt, wäre ich für jeden Hinweis sehr dankbar.

Gruß,
Benedikt[/i]


----------



## dzim (28. Mai 2008)

Hallo,

Also erst einmal: danke für den Hinweis mit den IProgressMonitor.UNKNOWN - das wusste ich nicht und genau das brauchte ich.

Ich hatte kürzlich mal ein ähnliches Problem. Der Job lief im Hintergrund, der Balken wurde unten in der Statuszeil angezeigt, aber das Fenster kam nicht.

Erste Frage (auch wenn sie vielleicht unnütz ist, weil du es schon hast): Hast du im preWindowOpen() configurer.setShowProgressIndicator(true); gesetzt?

Zweite Frage: Von wo aus startest du den Job?
Ich habe es einmal über einen "Validate"-Button in einem Dialog gemacht und mich gewundert, das nichts aus ein kurzes aufflackern passierte, korrekt erschien der Fortschrittsbalken erst, als ich es auf den Ok-Button des selben Dialogs gelegt hatte - also der Dialog disposed() war...

Grüßle,
D.


----------



## dzim (28. Mai 2008)

Wer lesen kann ist klar im Vorteil, du hast es ja geschrieben, von wo aus du den Job startest.

Ich hatte mal das Problem von einem Job aus eine Tabelle zu updaten.
Problem: Illegal Thread Access.
Lösung: UIJob.

Versuche mal folgendes:


```
UIJob ui_job = new UIJob(
recordSign2Export) {
 @Override
 public IStatus runInUIThread(
  IProgressMonitor monitor) {
   TaskTreeView.viewerRefresh();
   return Status.OK_STATUS;
 }
};
ui_job.schedule();
```
kapsel vielleicht das, was du in deiner run() im  IWorkbenchWindowActionDelegate hast mal in einen solchen UIJob... Vielleicht hilft's ja...

Erneute Grüßle,
D.


----------



## bschaefer (28. Mai 2008)

Sorry für die späte Antwort, ist zur Zeit recht stressig hier. Das Problem hatte sich schon durch _configurer.setShowProgressIndicator(true)_ gelöst


----------



## Beni (28. Mai 2008)

dzim hat gesagt.:
			
		

> Lösung: UIJob.



Danke für den Hinweis, diese 5 Buchstaben lösen meine Probleme


----------



## dzim (28. Mai 2008)

no problem @ bschaefer
kenn ich...

@Beni: bitte, auch wenn wir das Problem ja gar nicht kannten


----------

