2011-11-16 122 views
2

我的RCP應用程序出現問題。RCP應用程序活動

首先,我在plugin.xml中定義的活動:

<extension 
    point="org.eclipse.ui.activities"> 
    <activity 
     id="myproject.view.input.activity" 
     name="myproject.view.input.activity"> 
    <enabledWhen> 
     <with 
       variable="myproject.view.input.active"> 
      <equals 
       value="ENABLED"> 
      </equals> 
     </with> 
    </enabledWhen> 
    </activity> 
    <activityPatternBinding 
     activityId="myproject.view.input.activity" 
     pattern="myproject.gui/myproject.view.input"> 
    </activityPatternBinding> 

然後我定義我的SourceProvider:

<extension 
    point="org.eclipse.ui.services"> 
    <sourceProvider 
     provider="myproject.util.CommandState"> 
    <variable 
      name="myproject.view.input.active" 
      priorityLevel="workbench"> 
    </variable> 

最後,我CommandState類:

public class CommandState extends AbstractSourceProvider { 

    public final static String OUTPUT_VIEW = "myproject.view.input.active"; 
    // then goes some others variables, i just skip them 
    // .... 

    public final static String [] ACTIONS = {OUTPUT_VIEW /*and all others variables*/}; 

    public final static String ENABLED = "ENABLED"; 
    public final static String DISENABLED = "DISENABLED"; 

    private final Map <String, String> currentState = new HashMap <String, String>(); 

    @Override 
    public void dispose() { 
    } 

    @Override 
    public String[] getProvidedSourceNames() { 
     return ACTIONS; 
    } 

    @Override 
    public Map <String, String> getCurrentState() { 
     return currentState; 
    } 

    public void setEnabled(boolean enabled, String [] commands) { 
     String value = enabled ? ENABLED : DISENABLED; 
     for (String command : commands) { 
      currentState.put(command, value); 
      fireSourceChanged(ISources.WORKBENCH, command, value); 
     } 
    } 
} 

在我的登錄窗口中,應用程序檢查用戶權限,並啓用或禁用視圖,命令等與se CommandState的tEnabled方法。對於命令它工作正常,他們正在啓用或禁用正確(我禁用他們以其他方式,但它工作正常,即使我禁用他們通過活動,以我所述的相同方式)。但是,當我嘗試禁用視圖和開放的角度來看,包含視圖(myproject.view.input),它會打開沒有這一觀點,而且還拋出異常:

!ENTRY org.eclipse.ui 4 4 2011-11-16 15:54:43.284 
!MESSAGE Exception in org.eclipse.ui.internal.PageLayout.addView: org.eclipse.ui.PartInitException: Could not create view: myproject.view.input 

!ENTRY org.eclipse.ui 4 4 2011-11-16 15:54:43.321 
!MESSAGE Exception in org.eclipse.ui.internal.PageLayout.addView: org.eclipse.ui.PartInitException: Could not create view: myproject.view.input 
!STACK 1 
org.eclipse.ui.PartInitException: Could not create view: myproject.view.input 
    at org.eclipse.ui.internal.ViewFactory.createView(ViewFactory.java:158) 
    at org.eclipse.ui.internal.LayoutHelper.createView(LayoutHelper.java:162) 
    at org.eclipse.ui.internal.PageLayout.createView(PageLayout.java:543) 
    at org.eclipse.ui.internal.PageLayout.addView(PageLayout.java:416) 
    at org.eclipse.ui.internal.PageLayout.addStandaloneView(PageLayout.java:894) 
    at org.eclipse.ui.internal.registry.PerspectiveExtensionReader.processView(PerspectiveExtensionReader.java:295) 
    at org.eclipse.ui.internal.registry.PerspectiveExtensionReader.processExtension(PerspectiveExtensionReader.java:118) 
    at org.eclipse.ui.internal.registry.PerspectiveExtensionReader.readElement(PerspectiveExtensionReader.java:355) 
    at org.eclipse.ui.internal.registry.RegistryReader.readElements(RegistryReader.java:144) 
    at org.eclipse.ui.internal.registry.RegistryReader.readExtension(RegistryReader.java:155) 
    at org.eclipse.ui.internal.registry.RegistryReader.readRegistry(RegistryReader.java:176) 
    at org.eclipse.ui.internal.registry.PerspectiveExtensionReader.extendLayout(PerspectiveExtensionReader.java:82) 
    at org.eclipse.ui.internal.Perspective.loadPredefinedPersp(Perspective.java:818) 
    at org.eclipse.ui.internal.Perspective.createPresentation(Perspective.java:270) 
    at org.eclipse.ui.internal.Perspective.<init>(Perspective.java:156) 
    at org.eclipse.ui.internal.tweaklets.Workbench3xImplementation.createPerspective(Workbench3xImplementation.java:55) 
    at org.eclipse.ui.internal.WorkbenchPage.createPerspective(WorkbenchPage.java:1672) 
    at org.eclipse.ui.internal.WorkbenchPage.busySetPerspective(WorkbenchPage.java:1034) 
    at org.eclipse.ui.internal.WorkbenchPage.access$16(WorkbenchPage.java:1025) 
    at org.eclipse.ui.internal.WorkbenchPage$19.run(WorkbenchPage.java:3715) 
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) 
    at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3713) 
    at org.eclipse.ui.handlers.ShowPerspectiveHandler.openPerspective(ShowPerspectiveHandler.java:146) 
    at org.eclipse.ui.handlers.ShowPerspectiveHandler.openOther(ShowPerspectiveHandler.java:118) 
    at org.eclipse.ui.handlers.ShowPerspectiveHandler.execute(ShowPerspectiveHandler.java:57) 
    at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) 
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) 
    at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:178) 
    at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:247) 
    at org.eclipse.ui.actions.PerspectiveMenu.runOther(PerspectiveMenu.java:376) 
    at org.eclipse.ui.actions.PerspectiveMenu$3.runWithEvent(PerspectiveMenu.java:130) 
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) 
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) 
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161) 
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) 
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) 
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) 
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) 
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 
    at myproject.arm.demo.Application.start(Application.java:28) 
    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:369) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1408) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1384) 
!SUBENTRY 1 org.eclipse.ui 4 0 2011-11-16 15:54:43.322 
!MESSAGE Could not create view: myproject.view.input 

我試圖調試我的申請,前打開我的觀點whith那視圖,我檢查了我的CommandState源提供程序的currentState,並且所有圖片都可以:所有變量值都正確並且myproject.view.input.active = DISABLED

任何人都可以說,爲什麼會拋出異常?感謝您的任何幫助,或任何想法。對不起,大柱和髒話

*編輯:添加了完整的堆棧跟蹤

+0

聽起來不像它與活動定義有任何關係。我們需要stacktrace以獲得進一步的幫助... –

回答

3

的系統工作。一項活動可以使用戶看不到視圖或嚮導,但可以讓他們有意識地顯示它。

啓用了的活動當元素也從視圖註冊表中刪除視圖時,因此用戶無法故意顯示它,即使他們想要。這是爲了防止用戶在RCP應用程序中打開管理視圖。

您已將視圖添加到您的視角,並且如果您的活動被禁用,就好像該視圖定義不存在一樣。

您應該將該視圖添加爲視圖佔位符或管理員透視圖。如果用戶使用管理員角色登錄,則可以顯示視圖或選擇管理員視角。

+0

感謝您的回答!我仍然有一些問題,比我後面發佈的 – Peter

+0

再次感謝。我以其他方式解決了我的問題。在我的「管理員」透視圖的透視工廠中,我檢查 - 是否存在此視圖,並且僅在存在時才添加它。看起來我做了一些不必要的工作,但沒有例外地正常工作! – Peter

+0

+100 for'具有enabledWhen元素的活動也將視圖從視圖註冊表中移除,因此即使用戶想要,用戶也不能故意顯示它。這是我永久隱藏我的觀點所需的確切解決方案;這似乎是非常缺乏記錄! – SpellingD