2016-05-12 5 views
0

Wenn ich Preferences öffne und die Config aktualisiere, brauche ich einen "alten" Part. Aber ich stoße auf ein Problem. Eclipse löst eine Ausnahme aus, die besagt, dass das Fenster nicht aktiv ist!Wie man Eclipse e4 Part schließt, wenn das Preferences Fenster geöffnet ist

Was soll ich tun?

!STACK 0 
java.lang.IllegalStateException: Application does not have an active window 
    at org.eclipse.e4.ui.internal.workbench.ApplicationPartServiceImpl.getActiveWindowService(ApplicationPartServiceImpl.java:43) 
    at org.eclipse.e4.ui.internal.workbench.ApplicationPartServiceImpl.hidePart(ApplicationPartServiceImpl.java:142) 
    at cn.oge.kdm.proapp.application.analysis.platform.preference.editor.PlatformAddressPreferencePage$5.widgetSelected(PlatformAddressPreferencePage.java:313) 
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769) 
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:827) 
    at org.eclipse.jface.window.Window.open(Window.java:803) 
    at org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog.open(WorkbenchPreferenceDialog.java:211) 
    at org.eclipse.ui.internal.OpenPreferencesAction.run(OpenPreferencesAction.java:63) 
    at org.eclipse.jface.action.Action.runWithEvent(Action.java:473) 
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:595) 
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:511) 
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:420) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769) 

Antwort

1

Es sieht aus wie Sie die Anwendung EPartService zu versuchen verwenden und einen Teil zu schließen. Dies funktioniert nicht, wenn ein Dialog geöffnet ist, da kein aktives Fenster vorhanden ist, das der Anwendungsteildienst benötigt.

Stattdessen müssen Sie den Teileservice für das oberste Fenster verwenden. Holen Sie sich das mit etwas wie:

@Inject 
EModelService modelService; 
@Inject 
MApplication application; 

MWindow window = (MWindow)modelService.find("id of your top level window", application); 

EPartService partService = window.getContext().get(EPartService.class); 
Verwandte Themen