Как закрыть Eclipse e4 Part, когда открыто окно настроек

Когда я открываю настройки и обновляю конфигурацию, мне нужно закрыть "старую" часть. Но столкнулся с проблемой. Eclipse выдает исключение, которое сообщает мне, что Window не активен!

Что я должен делать?

!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)

person ProEditor    schedule 12.05.2016    source источник


Ответы (1)


Похоже, вы используете приложение EPartService, чтобы попытаться закрыть часть. Это не будет работать, когда открыто диалоговое окно, поскольку нет активного окна, которое необходимо службе части приложения.

Вместо этого вам нужно использовать частичную службу для окна верхнего уровня. Получите это, используя что-то вроде:

@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);
person greg-449    schedule 12.05.2016