2016-05-12 3 views
0

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

Что мне делать?

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

ответ

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