Java RCP应用活动

Java RCP应用活动,java,eclipse-plugin,eclipse-rcp,Java,Eclipse Plugin,Eclipse Rcp,我的RCP申请有问题 首先,我在plugin.xml中定义了一个活动: <extension point="org.eclipse.ui.activities"> <activity id="myproject.view.input.activity" name="myproject.view.input.activity"> <enabledWhen> <with

我的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);
        }
    }
}
公共类CommandState扩展了AbstractSourceProvider{
公共最终静态字符串输出\u VIEW=“myproject.VIEW.input.active”;
//然后是其他变量,我跳过它们
// ....
公共最终静态字符串[]ACTIONS={OUTPUT_VIEW/*和所有其他变量*/};
公共最终静态字符串ENABLED=“ENABLED”;
公共最终静态字符串DISENABLED=“DISENABLED”;
私有最终映射currentState=newhashmap();
@凌驾
公共空间处置(){
}
@凌驾
公共字符串[]GetProviderdSourceNames(){
返回动作;
}
@凌驾
公共映射getCurrentState(){
返回电流状态;
}
public void setEnabled(已启用布尔值,字符串[]命令){
字符串值=已启用?已启用:已禁用;
用于(字符串命令:命令){
currentState.put(命令、值);
fireSourceChanged(isosources.WORKBENCH、命令、值);
}
}
}
在我的登录窗口中,应用程序检查用户权限,并使用CommandState的setEnabled方法启用或禁用视图、命令等。对于命令,它可以正常工作,它们可以正确地启用或禁用(我以其他方式禁用它们,但即使我通过活动禁用它们,它也可以正常工作,方式与我描述的相同)。但当我尝试禁用视图并打开包含该视图(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
!条目org.eclipse.ui 4 2011-11-16 15:54:43.284
!org.eclipse.ui.internal.PageLayout.addView:org.eclipse.ui.PartInitException:无法创建视图:myproject.view.input
!条目org.eclipse.ui 4 4 2011-11-16 15:54:43.321
!org.eclipse.ui.internal.PageLayout.addView:org.eclipse.ui.PartInitException:无法创建视图:myproject.view.input
!堆栈1
org.eclipse.ui.partInItemException:无法创建视图:myproject.view.input
位于org.eclipse.ui.internal.ViewFactory.createView(ViewFactory.java:158)
位于org.eclipse.ui.internal.LayoutHelper.createView(LayoutHelper.java:162)
位于org.eclipse.ui.internal.PageLayout.createView(PageLayout.java:543)
位于org.eclipse.ui.internal.PageLayout.addView(PageLayout.java:416)
位于org.eclipse.ui.internal.PageLayout.addStandaloneView(PageLayout.java:894)
位于org.eclipse.ui.internal.registry.PerspectiveExtensionReader.processView(PerspectiveExtensionReader.java:295)
位于org.eclipse.ui.internal.registry.PerspectiveExtensionReader.processExtension(PerspectiveExtensionReader.java:118)
位于org.eclipse.ui.internal.registry.PerspectiveExtensionReader.readElement(PerspectiveExtensionReader.java:355)
位于org.eclipse.ui.internal.registry.RegistryReader.readElements(RegistryReader.java:144)
位于org.eclipse.ui.internal.registry.RegistryReader.readExtension(RegistryReader.java:155)
位于org.eclipse.ui.internal.registry.RegistryReader.readRegistry(RegistryReader.java:176)
位于org.eclipse.ui.internal.registry.PerspectiveExtensionReader.extendLayout(PerspectiveExtensionReader.java:82)
位于org.eclipse.ui.internal.Perspective.loadPredefinedPersp(Perspective.java:818)
位于org.eclipse.ui.internal.Perspective.createPresentation(Perspective.java:270)
位于org.eclipse.ui.internal.Perspective(Perspective.java:156)
位于org.eclipse.ui.internal.tweaklets.Workbench3xImplementation.createPerspective(Workbench3xImplementation.java:55)
位于org.eclipse.ui.internal.WorkbenchPage.createPerspective(WorkbenchPage.java:1672)
位于org.eclipse.ui.internal.WorkbenchPage.busysetpage(WorkbenchPage.java:1034)
在org.eclipse.ui.internal.WorkbenchPage.access$16(WorkbenchPage.java:1025)
位于org.eclipse.ui.internal.WorkbenchPage$19.run(WorkbenchPage.java:3715)
位于org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
位于org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3713)
位于org.eclipse.ui.handlers.ShowPerspectiveHandler.openPerspective(ShowPerspectiveHandler.java:146)
位于org.eclipse.ui.handlers.ShowPerspectiveHandler.openOther(ShowPerspectiveHandler.java:118)
位于org.eclipse.ui.handlers.ShowPerspectiveHandler.execute(ShowPerspectiveHandler.java:57)
位于org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293)
位于org.eclipse.core.commands.Command.executeWithChecks(Command.java:476)
位于org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:178)
位于org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:247)
位于org.eclipse.ui.actions.PerspectiveMenu.runOther(PerspectiveMenu.java:376)
在org.eclipse.ui.actions.PerspectiveMenu$3.runWithEvent(PerspectiveMenu.java:130)上
位于org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
访问org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
位于org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
位于org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
位于org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
位于org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
在org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)上
位于org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
位于org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
位于org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
位于org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
在org.eclipse.core.d