Was ich erreichen will, ist ziemlich einfach: Ich möchte der Benutzer nicht in der Lage sein, die Anwendung zu sehen, wenn er nicht angemeldet istAnzeigen Anmeldung Dialog vor der Anwendung
Also, was ich tun muss, ist eine Anmeldung zu zeigen. Dialog, dann erstellen Sie die Anwendung. Ich habe versucht, genau das in IApplication#start(IApplicationContext)
zu tun, aber diese Methode wird offensichtlich nicht im UI-Thread ausgeführt, so hatte ich kein Glück, um Dialoge zu bekommen, um dort zu zeigen.
Danach habe ich versucht, WorkbenchAdvisor#preStartup()
:
public void preStartup() {
if (openLoginDialog() != Window.OK) {
getWorkbenchConfigurer().emergencyClose();
}
}
Ich glaube nicht, emergencyClose()
die richtige Methode ist hier zu nennen, aber IWorkbench#close()
wirft ein NullPointerException
und öffnet noch ein Fenster Stummel.
Nun, wirft emergencyClose()
NullPointerException
auch, aber anders als das funktioniert wie erwartet:
java.lang.NullPointerException
at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:1204)
at org.eclipse.ui.internal.Workbench.access$22(Workbench.java:1113)
at org.eclipse.ui.internal.Workbench$19.run(Workbench.java:1454)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.ui.internal.Workbench.close(Workbench.java:1451)
at org.eclipse.ui.internal.WorkbenchConfigurer.emergencyClose(WorkbenchConfigurer.java:159)
at org.acme.project.ApplicationWorkbenchAdvisor.preStartup(ApplicationWorkbenchAdvisor.java:36)
at org.eclipse.ui.internal.Workbench$24.runWithException(Workbench.java:1718)
at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:32)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4155)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3772)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2989)
at org.eclipse.ui.internal.Workbench.access$9(Workbench.java:2894)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:685)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:606)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
Gibt es eine Möglichkeit, diese Ausnahme zu verhindern? Oder gibt es eine bessere Möglichkeit, einen Anmeldedialog zu öffnen, bevor das erste Anwendungsfenster geöffnet wird?
Die meisten scheinen den Begrüßungsbildschirm zum Anmelden zu verwenden. Dazu gibt es auf der Registerkarte "Splash" des xxx.product-Dateieditors eine Vorlage (die ich selbst nie probiert habe). –
@ greg-449 Das ist ein großartiges Feature. Schreckliche GUI-Unterstützung, aber tolle Funktion. Jetzt funktioniert es wie erwartet, danke. –