# UIJob und das Öffnen von Editoren



## dzim (16. Jul 2009)

Hallo zusammen,

ich hab euch ja bereits eine Zeitlang nicht mehr mit kryptischen Fragen zu (leider oftmals einfachen) RCP-Problemen gequält.
Das hole ich heute nach! ;-)

Ich habe folgendes Problem:
Ich möchte gerne einen Editor öffnen - dieser ist reichlich dumm und zeigt nur den Inhalt einer (Statistik-)CSV-Datei mit JFreeChart an, nachdem vorher zusammengeklickt wurde, was denn überhaupt genau gezeigt werden soll.

BTW: JFreeChart dokumentation sucks!

Das öffnen des Editors kann, je nach größe der CSV-Datei, eine Weile in Anspruch nehmen. Find ich blöd, daher dachte ich mir: Ab in einen Job. Da ich hier einen Editor öffne, kann es nur ein UIJob sein - sonst kommt ja nur eine Invalid Thread Access Exception.
So weit so gut. Schnell einen UIJob implementiert - ich meine, der muss ja nicht viel können! - und ausprobiert.

Ergebnis: Blockerte Oberfläche!

WTF!?

Ich hab das Problem schon einmal an anderer Stelle gehabt, zu dem Zeitpunkt aber auch keine Lust mich da weiter drum zu kümmern, aber jetzt nervt es micht schon mittel bis sehr...

Kann mir jemand Tipps geben, wie ich das Öffnen von Editoren in Jobs bekomme???

Danke schon mal vorab!
dzim


----------



## Beni (16. Jul 2009)

Der UIJob läuft, wie der Name suggeriert, im UI-Thread, deshalb ist dann auch die Oberfläche blockiert. Ich weiss ja nicht genau was du machen musst, aber irgendwie solltest du den Teil der viel kostet von dem UI-Teil trennen. Dann könntest du z.B. den Editor erstellen, danach einen Job starten der die CVS Datei liest und analysiert, und dann mit einem oder mehreren UIJobs den Editor nachträglich noch füllen.


----------



## dzim (16. Jul 2009)

hm... so hab ich das noch nicht betrachtet, ich hätte halt gedacht, das ein UserJob wirklich wie ein normaler Job funzt und auch ein 'verzögertes' anzeigen von widgets forcieren kann.

Also bei meinem gegenwärtigen Problem könnte ich die Datenaufarbeitung in einen Job legen und bei Beenden des selbigen per UIJob den Editor updaten.
Aber bei meinem alten Editor kann ich mir das eher schlecht vorstellen...
(Jedenfalls nicht ohne einen ordentlichen Schwung Arbeit.)


----------



## dzim (16. Jul 2009)

So. Ich werf jetzt mit Jobs und UIJobs nur so um mich, aber wirklich toll find ich dass noch nicht (vor allem, da die meisten nun anonyme (UIJobs) oder wenigstens private Klassen sind...
Es funktioniert jetzt zwar, aber wie gesagt: Wirklich schön find ich das gerade alles nicht!

Ich hätte wirklich gedacht, da der UIJob auch mit IProgressMonitor ausgestattet ist, das er sich änhlich wie ein "normaler" Jo verhalten würde und NICHT die Oberfläche einfrieren lässt.


----------



## dzim (21. Jul 2009)

Gibt's hierzu noch irgendwelche Hinweise?

Ich würde gerne wissen, warum der UIJob nen IProgressMonitor hat, aber trotzdem die Oberfläche verklemmen kann...

Nicht das ich Benis Erklärung nicht glauben würde, ich finde es nur einfach recht seltsam!


----------



## Beni (21. Jul 2009)

Ich vermute mal der hat einen IProgressMonitor damit man ihn a) abbrechen kann, b) um Methoden aufzurufen die ihrerseites einen IProgressMonitor benoetigen. Aber eine wirklich gute Erklaerung habe ich nicht.


----------



## dzim (21. Jul 2009)

Mist! ;-)

Trotzdem danke!

Ich empfinde es aber immer noch als Krücke, das ich einen Editor, der lange Zeit zum Start benötigt, quasi leer erstellen muss, un einen Job mitstarte, der ihn dann befüllt. Das find ich, ich kann es nicht anders sage: Hässlich.

Aber sei's drum... Danke für die schnelle Hilfe jedenfalls!


----------



## Vayu (22. Jul 2009)

und wenn du vorher dein datamodel erstellst über einen normalen job und dann hinterher einen schnellen UIJob für den Editor, dem du direkt dein datamodel übergibst? Da isser nicht leer am anfang


----------



## dzim (24. Jul 2009)

Ja.... Na klar würde das gehen...
Ich müsste den Programmteil halt "nur" noch einmal so umbauen, das er das kann, bzw, das Modell des Editors (das jetzt schon recht komplex ist, noch etwas aufbohren.

Aber du hast recht!


----------



## Kris (29. Okt 2010)

Hallo zusammen

Ich habe einen FormPageEditor mit einigen FormPages. Diesen zu öffnn, nimmt etws Zeit in Anspruch. In meinem Fall liegt es nicht an den Daten, sondern am Erstellen des Editors. 
Gibt es eine Möglichkeit, den Editor aufbauen zu lassen, ohne, dass mir die GUI einfriert?

Mit UIJob habe ich es schon ausprobiert.
Klappt alles nicht.


----------



## Gast2 (29. Okt 2010)

On the Job: The Eclipse 3.0 Jobs API


Wenn die GUI nicht berührt sein soll nimmst einen normalen Job...
UI Sachen können NICHT im Hintergrund gemacht werden, darum sollte man den Teil auslagern welcher lange dauert einen Editor zu öffnen dauer nicht lange nur wenn man einen langen Job ausführt der muss dann ausgelagert werden.


----------



## Kris (29. Okt 2010)

Mein Editor braucht sechs vier bis sechs Sekunden.

Ist halt ein Editor mit mehreren FormPages und in jeder Page gibt es ein bis fünf Sektionen.


----------



## Gast2 (30. Okt 2010)

Kann ich mir jetzt nicht vorstellen, dass das so lange braucht.
Aber wie gesagt wenn die UI Aktionen so lange dauern bleibt dir nichts anderes übrig. Ale einen Monitor anzuzeigen und zu warten.


----------

