2014-06-10 1 views
0
https://www.eclipse.org/forums/index.php/m/1209165/srch=reset+perspective+in+e4#msg_1209165 와 전화 코드

public class ResetPerspective { 
// private static final String MAIN_PERSPECTIVE_STACK_ID = "MainPerspectiveStack"; 

@Execute 
public void execute(@Named(IServiceConstants.ACTIVE_SHELL) Shell shell, 
     EModelService modelService, MApplication app, 
     EPartService partService) { 

    MWindow window = (MWindow) modelService.find("Main", app); //main 

    final MPerspective perspective = modelService.getActivePerspective(window); 

    final MUIElement snippet = modelService.cloneSnippet(app, 
      perspective.getElementId(), window); 
    snippet.setToBeRendered(true); 
    if (snippet != null) { 
     MElementContainer<MUIElement> parent = perspective.getParent(); 
     perspective.setToBeRendered(false); 

     List<MWindow> existingDetachedWindows = new ArrayList<MWindow>(); 
     existingDetachedWindows.addAll(perspective.getWindows()); 



     MPerspective dummyPerspective = (MPerspective) snippet; 
     while (dummyPerspective.getWindows().size() > 0) { 
      MWindow detachedWindow = dummyPerspective.getWindows() 
        .remove(0); 
      perspective.getWindows().add(detachedWindow); 
     } 

     parent.getChildren().remove(perspective); 

     parent.getChildren().add(snippet); 
     System.out.println(parent.getChildren().get(0).getElementId()); 
     partService.switchPerspective((MPerspective) snippet); 
    } 
} 

} 

을 다음과 리셋 관점이 선택되어 코드는 인은 다음을 제공

리셋 관점 E4 오류에서 수행되는 경우가 발생 오류 오류 당신이 ID를 사용하여 응용 프로그램 모델에 윈도우가없는 것 같습니다

!ENTRY org.eclipse.e4.ui.workbench 4 0 2014-06-10 11:28:54.063 
!MESSAGE Internal Error 
!STACK 0 
org.eclipse.e4.core.di.InjectionException: java.lang.IllegalArgumentException: 
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:63) 
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:243) 
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:224) 
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132) 
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:167) 
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499) 
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) 
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213) 
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:850) 
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.handleWidgetSelection(HandledContributionItem.java:743) 
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.access$7(HandledContributionItem.java:727) 
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem$4.handleEvent(HandledContributionItem.java:662) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4170) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3759) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:140) 
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:162) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1450) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1426) 
Caused by: java.lang.IllegalArgumentException: 
    at org.eclipse.core.runtime.Assert.isLegal(Assert.java:63) 
    at org.eclipse.core.runtime.Assert.isLegal(Assert.java:47) 
    at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.findElementsRecursive(ModelServiceImpl.java:286) 
    at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.findElements(ModelServiceImpl.java:371) 
    at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.getActivePerspective(ModelServiceImpl.java:1075) 
    at bomb.handlers.ResetPerspective.execute(ResetPerspective.java:44) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56) 
    ... 33 more 
+0

여기에서 사용중인 코드를 보여줄 수 있습니까? –

+0

[this]를 다시 가리키는 해당 스레드의 마지막 주석을 참고하십시오 (http://stackoverflow.com/questions/19717154/how-do-i-reset-perspective-for-eclipse-e4-rcp-application/20106360). # 20106360) 답변은 여기에 있습니다. –

+0

코드가 – vinod

답변

1

다음과 같다 그래서 modelService.find("Main", app)는 retur "메인"입니다 null. null은 modelService.getActivePerspective(window)에 대한 잘못된 인수이므로 오류가 발생합니다.

응용 프로그램의 ID를 사용하려면이 코드를 수정해야합니다. Perspective에 대한 스니 j을 작성하기위한 지시 사항을 따라야합니다.

+0

질문에 공유되었습니다. 지금은 문제가 없습니다. – vinod