Editor und doSave()

Status
Nicht offen für weitere Antworten.
G

Gast2

Gast
Hallo zusammen,

in einem Editor hat man eine doSave(IProgressMonitor monitor) methode. Wie benutzt man richtig diesen Monitor damit des User auch diesen Vorgang sieht. So sieht er nichts.
Java:
	@Override
	public void doSave(IProgressMonitor monitor) {
		
		monitor.beginTask("Test", 100);
		monitor.worked(50);
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		monitor.worked(50);
		monitor.done();
}

Wenn ich aber einen Job instanziere und die
Code:
protected IStatus run(final IProgressMonitor monitor)
überschreibe habe ich ein neues monitor Objekt und der Job wird angezeigt. Meine Frage ist was mich mit dem Monitor Objekt in doSave() und wie benutze ich es richtig, damit der User auch was sieht.
 

Wildcard

Top Contributor
Du benutzt das schon richtig, in diesem Fall liegt es beim Aufrufer des Codes was er mit dem Monitor macht (also an der Workbench). Wie genau die Logik der Workbench an dieser Stelle aussieht kann ich dir nicht sagen, vielleicht wird nur dann Progress angezeigt wenn der Thread länger als X Sekunden benötigt.
 
G

Gast2

Gast
Du benutzt das schon richtig, in diesem Fall liegt es beim Aufrufer des Codes was er mit dem Monitor macht (also an der Workbench). Wie genau die Logik der Workbench an dieser Stelle aussieht kann ich dir nicht sagen, vielleicht wird nur dann Progress angezeigt wenn der Thread länger als X Sekunden benötigt.

Wie meinst du wie der Code an der Stelle aussieht den kann ich ja selber gestalten???
Also ich bekomms nur mit jobs hin, dass diese angezeigt werden.
Wie machst du es wenn in dem doSave etwas längeres passiert, dass es in de Jobview angezeigt wird oder als ProgressDialog???
 

Wildcard

Top Contributor
Der ProgressMonitor ist Headless, ohne grafische Entsprechung. Es liegt am Aufrufer (der Workbench) um zu entscheiden ob und wie dieser Progress dem Anwender präsentiert wird. Bei Jobs entscheidet zB der Job Manager anhand isUser und ob eine Workbench läuft ob Progress angezeigt werden soll, oder nicht. Es liegt in diesem Fall also an der Save Action zu entscheiden was mit dem Progress passieren soll, nicht an der doSave methode.
 
G

Gast2

Gast
Der ProgressMonitor ist Headless, ohne grafische Entsprechung. Es liegt am Aufrufer (der Workbench) um zu entscheiden ob und wie dieser Progress dem Anwender präsentiert wird. Bei Jobs entscheidet zB der Job Manager anhand isUser und ob eine Workbench läuft ob Progress angezeigt werden soll, oder nicht. Es liegt in diesem Fall also an der Save Action zu entscheiden was mit dem Progress passieren soll, nicht an der doSave methode.

Jop soweit hab ich es mir gedacht. Aber einem Job oder ProgressMonitor kann ich keinen Monitor mitgeben, dass heißt wenn ich einen neuen Job instanzieren muss ich die
Code:
protected IStatus run(IProgressMonitor monitor)
überschreiben und da hab ich einen neues monitor Objekt, wobei das andere überflüssig wird.Oder übersehe ich was? Eventuell irgendwo ein Beispiel?
 

Wildcard

Top Contributor
Beispiel? Der Job Manager gibt dem Job einen Progress Monitor der (bei setUser(true)) in einem Dialog angezeigt wird. Die Workbench (oder die Action die doSave) aufruft, tut das nicht. Vielleicht läuft der ProgressMonitor einfach ins leere (NullProgressMonitor), vielleicht wird erst ein Dialog angezeigt wenn der Vorgang mehr als n Sekunden dauert.
Innerhalb von doSave hast du keine Kontrolle darüber, du musst lediglich Progress Reporten. Was mit diesem Progress dann passiert bestimmt die Workbench
 
G

Gast2

Gast
Okay alles klar wenn ich also eine lange save methode habe, dann muss ich einen eigenen Job machen und diesen über den JobManager anzeigen lassen() innerhalb der doSave.
Also die doSave ruf ich ja nicht selber auf in einem Editor, das macht ja das Framework.
Richtig verstanden?

Aber dann versteh ich immer noch nicht ganz für was der Monitor in der doSave genau da ist?!
 
Zuletzt bearbeitet von einem Moderator:

Wildcard

Top Contributor
Nein, das habe ich nicht gesagt, ich habe gesagt es ist lediglich deine Aufgabe den Progress zu Reporten, nicht ihn anzuzeigen.
Schau doch einfach mal nach was die Workbench damit macht indem du einen Breakpoint setzt und dann den Stack hochläufst.
 
G

Gast2

Gast
Okay werd ich daheim mal machen. Ich überprüf auch mal ob es ein NullProgressMonitor ist.

Gibt es irgendwelche Workbench settings, um da irgendwas dran zu ändern?
Also ich reporte meine methode, aber wenns niemand interessiert oder ich nichts damit machen kannt bringts ja irgendwie nix^^...
 

Wildcard

Top Contributor
Ich kenne die Eclipse API nunmal nicht auswendig, du wirst also selbst schauen müssen was mit dem Progress passiert.
 
G

Gast2

Gast
Also ich komm von der WorkbenchPage savePart...und dann in den SaveHelper.run. Und hab als Monitor
Code:
org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor
aber jetzt weiß ich auch nicht mehr ^^!?!Vor allem nicht wie ich es manipulieren kann^^, vielleicht stell ich mich grad blöd an, aber was hat das mit der API zu tun ich drück auf Save(Standard Command) und das Framework macht doch den rest????
 
Zuletzt bearbeitet von einem Moderator:

Wildcard

Top Contributor
Den sollst du auch nicht manipulieren. Schau doch einfach mal was damit passiert, dann findest raus unter welchen Bedingungen der Progress dem User präsentiert wird.
 
G

Gast2

Gast
Mhm ich glaub ich versteh leider den zusammenhang noch nicht...
Wenn ich debuge komme ich soweit zurück dass ich weiß wo der Monitor erstellt wird.
Aber nirgends sehe ich einen Job, wo es eine bedingung geben könnte dass ich ihn anzeigen lassen könnte...

im SaveHelper.savePart
Java:
IRunnableWithProgress progressOp = new IRunnableWithProgress() {
			public void run(IProgressMonitor monitor) {
				IProgressMonitor monitorWrap = new EventLoopProgressMonitor(monitor);
				saveable.doSave(monitorWrap);
			}
		};

		// Do the save.
		return runProgressMonitorOperation(WorkbenchMessages.Save, progressOp, window);

Aber wenn ich das richtig verstanden hab passiert des alles im UI Thread...
Wie machst denn du sowas, du hast ein editor gibst daten ein, diese willst du jetzt speichern??
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Super der Progress wir in der StatusLine angezeigt ahhh^^... Ich find net raus wie ich den in der View oder in nem eigenen ProgressDialog anzeigen lassen kann...

weil hier im ApplicaitonWindow holt er sich den StatusLineManager. Ich denk mal um einen Progress in der View anzeigen zu lassen bräuchte ich den ProgressManager
Java:
    try {
            operationInProgress = true;
            final StatusLineManager mgr = getStatusLineManager();
            if (mgr == null) {
                runnable.run(new NullProgressMonitor());
                return;
            }
  
                BusyIndicator.showWhile(display, new Runnable() {
                    public void run() {
                        try {
                            ModalContext.run(runnable, fork, mgr
                                    .getProgressMonitor(), display);
                        } catch (InvocationTargetException ite) {
                            holder[0] = ite;
                        } catch (InterruptedException ie) {
                            holder[0] = ie;
                        }
                    }
                });
 
Zuletzt bearbeitet von einem Moderator:

Wildcard

Top Contributor
Wenn du unbedingt einen Dialog sehen willst, und die Workbench dafür keinen Hook anbietet, dann würde mir nur einfallen einen Progress Monitor Wrapper zu erstellen der den Progress an zwei ProgressMonitors weiterreicht. Einer ist der übergebene, der andere ein eigener den du in einem Dialog anzeigst.
Reicht die Status Line denn nicht? Braucht dein Editor derart lange?
 
G

Gast2

Gast
Nee so lange braucht er nicht, wollte nur rausfinden obs es möglich wäre.
Ich denke ich mache einfach einen eigenen Job oder ProgressDialog in der save Methode.
Spricht ja eigentlich nichts dagegen...
Die StatusLine wäre in Ordnung nur leider kann man dort den Progress abbrechen.
 

Wildcard

Top Contributor
Du kannst nur abbrechen wenn du auf ProgressMonitor#isCanceled reagierst. Dein Code wird nicht gestoppt.
 
G

Gast2

Gast
Ja des weiß ich...
Aber sieht halt doof aus wenn der Button cancel aktiviert ist, dann denkt der User er kann was machen, obwohl es nicht so ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L HTML Editor Plattformprogrammierung 2
P Artifact-Editor in RCP-Anwendung Plattformprogrammierung 14
TheWhiteShadow RCP Zustand von Editor Toolbar ToggleButton aktualisieren Plattformprogrammierung 0
D Eclipse_Visual Editor Problem Plattformprogrammierung 2
M Extension Point für Content Assist in JSP Editor gesucht Plattformprogrammierung 2
TheWhiteShadow RCP Editor Inhalt speichern Plattformprogrammierung 3
TheWhiteShadow RCP Konstrukt für Editor in Eclipse gesucht. Plattformprogrammierung 3
P RCP Text Editor Example - Missing Bundles lassen sich nicht auffinden. Plattformprogrammierung 6
3 Eclipse Editor Plugin selektiert Projekt nicht Plattformprogrammierung 10
C Java Editor funktioniert nicht Plattformprogrammierung 9
G RCP Eclipse Editor + Guice Plattformprogrammierung 8
J RCP Verhindern, dass Editor geschlossen wird Plattformprogrammierung 5
slawaweis RCP Formularbasierter XML-Editor (bzw. vorhandenen XML-Editor integrieren) Plattformprogrammierung 8
C Eclipse Plugin Entwicklung: Editor für Flussdiagramme Plattformprogrammierung 6
E Editor Schriftgröße ändern per "Java Code" Plattformprogrammierung 8
W letzte angeklickten Editor ermitteln Plattformprogrammierung 3
S GMF Editor mit einem zur Laufzeit erstellten Modell Plattformprogrammierung 4
B Eclpise Visual Editor Plattformprogrammierung 2
A RCP Editor-Reiter (FormEditor): Kann Rechtsklick-Menue überschrieben werden? Plattformprogrammierung 6
A RCP Tabs oben und unten im Editor oder mehrere Editoren? Plattformprogrammierung 7
B GMF Editor mit nur einem Connection Tool Plattformprogrammierung 5
T RCP - Scrollable Editor Plattformprogrammierung 4
T Speichern eines Objectes in einem Editor (mit isDirty) Plattformprogrammierung 6
J TableViewer aus Editor refreshen Plattformprogrammierung 5
T RCP Local History für eigenen Editor Plattformprogrammierung 9
L RCP Genmodel-Editor? Plattformprogrammierung 2
U Klassendiagramm-Editor (EMF, GMF, Ecore Tools) Plattformprogrammierung 3
M gmfgraph editor Plattformprogrammierung 6
L RCP View in einem Editor öffnen? Plattformprogrammierung 3
B Eclipse RCP: Kontextsensitive Buttons für Editor und Hilfebutton für Wizard hinzufügen Plattformprogrammierung 5
J RCP Default Editor öffnen? Plattformprogrammierung 5
J Code Editor auslesen? Plattformprogrammierung 3
C [GEF] gespeicherte Dateien des generierten Editor Plattformprogrammierung 5
G Editor undo/redo Plattformprogrammierung 9
Spot84 datei im editor öffnen(tutorial undurchsichtig) Plattformprogrammierung 5
G Editor anzeigen Plattformprogrammierung 2
T Setze Gradienten auf Elemente(GMF-Editor) Plattformprogrammierung 2
S Custom Editor Content Assist Plattformprogrammierung 3
G WYSIWYG HTML Editor als Eclipse Plug-In Plattformprogrammierung 6
K XML Editor im Project Plattformprogrammierung 12
K Editor nicht in der 'EditorArea' öffnen, sondern in einem Folder(Layout). Plattformprogrammierung 10
S RCP Anfängerfrage - Zusammenspiel View, Editor, Model Plattformprogrammierung 4
D GEF Editor als RCP ausführen Plattformprogrammierung 10
G Editor Plattformprogrammierung 6
N GMF Editor automatisch generieren Plattformprogrammierung 2
H Visueller Editor für Eclipse RCP Anwendung Plattformprogrammierung 3
G xml-Datei im Editor importieren Plattformprogrammierung 3
dzim Editor aus View öffnen - fehler: unbekannte Editor ID Plattformprogrammierung 11
Paule EMF Editor Dateiverknüpfungen Plattformprogrammierung 9

Ähnliche Java Themen


Oben