Progress monitor bei Job erscheint nicht

Status
Nicht offen für weitere Antworten.

bschaefer

Mitglied
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:
Code:
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:
Code:
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

Top Contributor
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

Top Contributor
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:

Code:
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

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

dzim

Top Contributor
no problem @ bschaefer
kenn ich...

@Beni: bitte, auch wenn wir das Problem ja gar nicht kannten :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen


Oben