Neustart nach preference-Änderung

Status
Nicht offen für weitere Antworten.

NGP

Mitglied
Hallo,

ich möchte in meiner RCP-Anwendung nach einer Änderung bestimmter Präferenzen bei Bestätigung in der preference-page neu starten:

Java:
boolean performOk(){
  super.performOk();
  if(boolRestartNecessary){
    PlatformUI.getWorkbench().restart();
  }
  return true;
}

Das funktioniert soweit aber beim beenden der PreferencePage wird vermutlich noch auf die Workbench zugegriffen, die bereits geschlossen ist - NullPointer -

Code:
	at org.eclipse.ui.internal.dialogs.FilteredPreferenceDialog.close(FilteredPreferenceDialog.java:587)
	at org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog.close(WorkbenchPreferenceDialog.java:140)
	at org.eclipse.jface.preference.PreferenceDialog$13.run(PreferenceDialog.java:951)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
...
Es wird natürlich trotzdem beendet und wieder gestartet, aber das missfällt mir, ich fand jedoch bislang keinen Weg, den Neustart erst dann anzustoßen, wenn die PreferencePage vollständig beendet ist. So etwas wie PostWindowClosed().

Hintergrund: Mein Anwender muss sich im Splash-Screen gegenüber der Datenbank authentifizieren. Ist keine Verbindung zur Datenbank vorhanden, wird der Login-Screen geschlossen, das Hauptfenster nicht gezeigt und es erscheint dafür die PreferencePage in der der Anwender die Datenbankadresse, Port,... angeben kann. Ändert er dort die Datenbankadresse startet die Anwendung neu, verbindet sich zu der DB und zeigt den Login-Screen.

Jemand etwas vergleichbares schon gelöst?

Grüße
Thomas
 
Zuletzt bearbeitet von einem Moderator:

NGP

Mitglied
Einen Notbehelf fand ich:

die preferences-page ist modal. Ich kann in der OK-Methode der preferences-page ein bit in der aufrufenden Klasse setzen. Wenn die Ablaufsteuerung zurückgegeben wird, kann ich nach einer Prüfung auf das Bit den Neustart veranlassen.

Sicher nicht die schönste Lösung, zumal nur in der Situation nutzbar, dass ich im Code die preference-page aufrufe.
Schönere Lösungsvorschläge willkommen.

Grüße
Thomas
 
V

Vayu

Gast
Kannst du dich nicht als Listener an die Prefs hängen und bei change einer bestimmten halt den neustart veranlassen?

Java:
DeinPluginActivator.getDefault().getPreferenceStore().addPropertyChangeListener(WerAuchImmer);
DeinPluginActivator.getDefault().getPluginPreferences().addPropertyChangeListener(WerAuchImmer);
 
Zuletzt bearbeitet von einem Moderator:

NGP

Mitglied
Jetzt wenn ich's lese, ...
Statt über die properties-page zu versuchen geordnet herunterzufahren, auf eine Änderung der Properties reagieren.

-Habe es eben eingebaut. Einwandfrei. Danke für den Tip.

(Wenn ich jetzt noch die Schaltfläche fände, mit der ich das Thema als abgeschlossen markiere :) )

Gruß
Thomas
 
Zuletzt bearbeitet:
V

Vayu

Gast
die schaltfläche gibt es noch nicht wieder. im alten forum ging das. wird aber wohl dran gearbeitet :)
 

NGP

Mitglied
Ich habe festgestellt, als ich den Vorschlag testete war in der Run-Configuration -consoleLog nicht gesetzt.
Die Exception wird auch mit dem Listener geworfen. :-(

Die properties-page greift noch irgendworauf zu, wenn der Restart ausgelöst wird. (Wenn ich den Neustart auslöse solange die Page sichtbar ist ergibt das ebensowenig ein Problem wie wenn ich es aufrufe, nachdem die PropertiesPage die Kontrolle zurückgab. Wohl irgendwo eine "Schreibe-die-Properties-Funktion" innerhalb der preferenceDialog-Klassen, die noch nicht fertig ist)

-Habe es eben eingebaut. Einwandfrei. Danke für den Tip.
 
V

Vayu

Gast
ok, da bin ich jetzt ehrlich gesagt ratlos ...

Ist es deine PrefPage die die NullPointerException wirft? Wenn ja zeig mal bitte ein bisschen Code (auch wenn ich da wohl eh nichts finde :p aber gucken schad nix)
 

NGP

Mitglied
Der Fehler tritt bereits bei vom Template erzeugten Code auf.
Code:
Extensions-org.eclipse.ui.preferencePages-templates-PreferencePages
An dem habe ich mich orientiert. Bei meiner Anwendung fügen noch weitere Plugins weitere Preferenzen ein aber prinzipiell das Selbe und auch bei dem Template taucht der Fehler auf.

Ich habe mal im Activator der RCP oder auch in einer ansonsten leeren view
Java:
Activator.getDefault().getPreferenceStore().addPropertyChangeListener(myPropertyChangeListener);
...
private IPropertyChangeListener myPropertyChangeListener=new IPropertyChangeListener(){

		public void propertyChange(PropertyChangeEvent event) {
			PlatformUI.getWorkbench().restart();
		}
	};
angelegt. Die Seite wird im Menü mit dem Command ID = org.eclipse.ui.window.preferences aufgerufen.

Im Debugger verfolgt wird der Restart ausgelöst, nach wenigen Schritten kommen dann Preference-Methoden wie
Java:
getPreferenceStore().setValue(getPreferenceName(), value);
oder 
StringFieldEditor -- protected void doStore() {
Das ist übrigens auch die letzte Methode, die vor der Exception gestartet wird.
Es macht den Eindruck, dass erst der property-changed-event (inklusive restart) ausgelöst wird, dann versucht wird, die neuen Properties zu schreiben. Das kann ja nur schief gehen.

Es gibt das Resources-Plugin mit dem man wohl handler erzeugen kann, die reagieren, wenn sich eine Datei ändert, der Gedanke wirkt aber nicht wirklich überzeugend auf mich.
 
Zuletzt bearbeitet:
V

Vayu

Gast
hab grad mal ein bisschen rumprobiert.

probier mal folgendes in deinem performOk()

Java:
UIJob j = new UIJob("BLABLA") {

            @Override
            public IStatus runInUIThread(IProgressMonitor monitor) {
                // hier vllt noch einen dialog der fragt, ob wirklich neu gestartet werden soll
                PlatformUI.getWorkbench().restart();
                return Status.OK_STATUS;
            }

        };
        j.schedule();
 

NGP

Mitglied
Habe es eingebaut. Keine Fehlermeldung. Du hast es gelöst :toll:
(Und ich habe kontrolliert, ConsoleLog ist gesetzt :))

Ich hatte schon probiert den Neustart als eigenen Job mit kurzer Verzögerung zu starten. Gab aber Fehler. Sollte ich mir mal anschauen, worin UIJob Job erweitert.

:arrow: AsyncExe
 
Zuletzt bearbeitet:
V

Vayu

Gast
du musst evtl noch unterscheiden, ob derjenige auf APPLY oder auf OK gedrückt hat :)

ich denke bei APPLY möchte man nicht zwingend, dass auf einmal die workbench neustartet.

sprich performApply überschreiben, n flag setzen und performOk aufrufen :)
 

Saxony

Top Contributor
Hiho,

da habe ich mal noch eine weitere Frage dazu: Wie kann ich für den neuen Programmstart auch neue Programmargumente mitgeben/setzen? Zum Beispiel der Neustart soll mit -nl en erfolgen.

bye Saxony
 

Wildcard

Top Contributor
da habe ich mal noch eine weitere Frage dazu: Wie kann ich für den neuen Programmstart auch neue Programmargumente mitgeben/setzen? Zum Beispiel der Neustart soll mit -nl en erfolgen.
Selbst wenn es dafür eine Methode gibt, wäre die Änderung natürlich nicht persistent, also beim nächsten Restart wieder vergessen, insofern solltest du vielleicht die eclipse.ini anpassen, oder die Programmverknüpfung entsprechend anpassen.
 
G

Gast2

Gast
Hiho,

da habe ich mal noch eine weitere Frage dazu: Wie kann ich für den neuen Programmstart auch neue Programmargumente mitgeben/setzen? Zum Beispiel der Neustart soll mit -nl en erfolgen.

bye Saxony

Ich habs mal gemacht, geht erst ab elcipse 3.4.xx ohne Bug.
Da gibt es eine extra restart map wo man neue Argumente reinlegen oder alte ändern kann.
Musst ein bischen gogglen gibt jede menge Bugs/Beschwerden dazu ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Nach Sprachpaket Installation kann eclipse nicht mehr gestartet werden Plattformprogrammierung 4
B Eclipse zeigt Fehler nach Java-Update auf 1.8.0_40 Plattformprogrammierung 3
S RCP Nach erfolgreicher Erstellung der View, wie weitermachen? Plattformprogrammierung 1
H PHP Perspective nach Run immer im Vordergrund - Was tun Plattformprogrammierung 0
J Charset-Problem nach Plugin-Export Plattformprogrammierung 1
N RCP Tabelle nach mehreren kriterien sortieren Plattformprogrammierung 2
B RCP LinkageError nach Produktexport Plattformprogrammierung 3
S RCP ContextMenu nach selectedTreeItem anpassen? Plattformprogrammierung 5
M RCP TableViewer schrumpft in View nach manueller Resize auf 1 Zeile Plattformprogrammierung 5
A RCP RAP-Bundle nach Installation nicht auffindbar?! Plattformprogrammierung 5
A RCP HTTP ERROR 404; einwandfreier Start nach Browser-Reload Plattformprogrammierung 4
S xpend ecore::EJavaObjet nach Integer oder String Plattformprogrammierung 11
M Nach Umbenennung der Packages viele Probleme Plattformprogrammierung 11
dzim Migration einer bestehenden Applikation nach e4 Plattformprogrammierung 11
lumo RCP libraries werden nach dem export nicht gefunden Plattformprogrammierung 17
dzim RCP Überführen einer RCP-Anwendung nach RAP Plattformprogrammierung 11
B Cross Build von WinXP, Fail nach Splash auf MAC Plattformprogrammierung 2
M Nach Export läuft Applikation nicht mehr??? Plattformprogrammierung 2
G swt widget disposed nach update auf 3.2 Plattformprogrammierung 4
P P2 + Helios: Habe störende Menüeinträge + Preference-Pages + Toolicons Plattformprogrammierung 4
dzim Workspace & Preference-Scopes (mal wieder) Plattformprogrammierung 7
S Gleiche Preference Page für mehrere Preferences Plattformprogrammierung 2
N preference page plugin Plattformprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben