2015-09-24 22 views
0

我在Eclipse e4 RCP应用程序中遇到了奇怪的行为。我们正在得到一个只是打印到StdErr的异常,并且似乎源自一些e4框架逻辑的更深层次。E4异常org.eclipse.core.commands.common.NotDefinedException

当启动应用程序,打开一个新的对话框(MWindow.class),并打开该对话框内的Nebula DateChooserCombo时,异常可靠地复制。

但是,在运行配置中激活e4 Spy插件时,我们没有发现异常。所以我研究了常规和间谍运行配置的差异。通过一些试验和错误,我能够弄清楚,当我添加插件“org.eclipse.ui”及其所需的插件时,异常不再发生。

现在我的两个问题是:

1)考虑下面的异常,是增加“org.eclipse.ui”来加载插件的列表中选择正确的方式去还是矫枉过正,只需解决方法吗?

2)如果“org.eclipse.ui”是解决方案,告诉PDE也将该插件及其所需插件与最终Eclipse RCP产品进行打包的最简单方法是什么?

org.eclipse.core.commands.common.NotDefinedException: Cannot get the parent identifier from an undefined context. org.eclipse.ui.contexts.dialog 
    at org.eclipse.core.commands.contexts.Context.getParentId(Context.java:197) 
    at org.eclipse.e4.ui.bindings.internal.ContextSet$CComp.getLevel(ContextSet.java:49) 
    at org.eclipse.e4.ui.bindings.internal.ContextSet$CComp.compare(ContextSet.java:39) 
    at org.eclipse.e4.ui.bindings.internal.ContextSet$CComp.compare(ContextSet.java:1) 
    at java.util.TimSort.binarySort(TimSort.java:265) 
    at java.util.TimSort.sort(TimSort.java:190) 
    at java.util.TimSort.sort(TimSort.java:173) 
    at java.util.Arrays.sort(Arrays.java:659) 
    at java.util.Collections.sort(Collections.java:217) 
    at org.eclipse.e4.ui.bindings.internal.ContextSet.<init>(ContextSet.java:77) 
    at org.eclipse.e4.ui.bindings.internal.BindingTableManager.createContextSet(BindingTableManager.java:90) 
    at org.eclipse.e4.ui.bindings.internal.BindingServiceImpl.setContextIds(BindingServiceImpl.java:177) 
    at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56) 
    at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:90) 
    at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:111) 
    at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:341) 
    at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:176) 
    at org.eclipse.e4.ui.internal.workbench.swt.ShellActivationListener$3.widgetDisposed(ShellActivationListener.java:182) 
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:123) 
    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.Widget.sendEvent(Widget.java:1137) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1118) 
    at org.eclipse.swt.widgets.Widget.release(Widget.java:822) 
    at org.eclipse.swt.widgets.Widget.dispose(Widget.java:460) 
    at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:447) 
    at org.eclipse.swt.widgets.Shell.dispose(Shell.java:725) 
    at zzz.tools.widgets.datechooser.ZzzDateChooserCombo.dropDown(ZzzDateChooserCombo.java:1072) 
    at zzz.tools.widgets.datechooser.ZzzDateChooserCombo.popupEvent(ZzzDateChooserCombo.java:767) 
    at zzz.tools.widgets.datechooser.ZzzDateChooserCombo$1.handleEvent(ZzzDateChooserCombo.java:574) 
    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.Widget.sendEvent(Widget.java:1137) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1118) 
    at org.eclipse.swt.widgets.Decorations.WM_ACTIVATE(Decorations.java:1685) 
    at org.eclipse.swt.widgets.Shell.WM_ACTIVATE(Shell.java:2193) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4659) 
    at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:339) 
    at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1633) 
    at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2117) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5050) 
    at org.eclipse.swt.internal.win32.OS.PeekMessageW(Native Method) 
    at org.eclipse.swt.internal.win32.OS.PeekMessage(OS.java:3141) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3764) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156) 
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:159) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) 
    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:606) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1515) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1488) 

以下堆栈跟踪是在同一个应用程序中打开普通的JFace MessageDialog时创建的。不同的用例 - >同样的错误:

org.eclipse.core.commands.common.NotDefinedException: Cannot get the parent identifier from an undefined context. org.eclipse.ui.contexts.dialog 
    at org.eclipse.core.commands.contexts.Context.getParentId(Context.java:197) 
    at org.eclipse.e4.ui.bindings.internal.ContextSet$CComp.getLevel(ContextSet.java:49) 
    at org.eclipse.e4.ui.bindings.internal.ContextSet$CComp.compare(ContextSet.java:39) 
    at org.eclipse.e4.ui.bindings.internal.ContextSet$CComp.compare(ContextSet.java:1) 
    at java.util.TimSort.binarySort(TimSort.java:265) 
    at java.util.TimSort.sort(TimSort.java:190) 
    at java.util.TimSort.sort(TimSort.java:173) 
    at java.util.Arrays.sort(Arrays.java:659) 
    at java.util.Collections.sort(Collections.java:217) 
    at org.eclipse.e4.ui.bindings.internal.ContextSet.<init>(ContextSet.java:77) 
    at org.eclipse.e4.ui.bindings.internal.BindingTableManager.createContextSet(BindingTableManager.java:90) 
    at org.eclipse.e4.ui.bindings.internal.BindingServiceImpl.setContextIds(BindingServiceImpl.java:177) 
    at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56) 
    at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:90) 
    at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:111) 
    at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:341) 
    at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:356) 
    at org.eclipse.e4.core.internal.contexts.EclipseContext.activate(EclipseContext.java:657) 
    at org.eclipse.e4.ui.internal.workbench.swt.ShellActivationListener$2.run(ShellActivationListener.java:124) 
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 
    at org.eclipse.e4.ui.internal.workbench.swt.ShellActivationListener.activate(ShellActivationListener.java:120) 
    at org.eclipse.e4.ui.internal.workbench.swt.ShellActivationListener.handleEvent(ShellActivationListener.java:74) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1266) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1112) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1137) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1122) 
    at org.eclipse.swt.widgets.Decorations.WM_ACTIVATE(Decorations.java:1673) 
    at org.eclipse.swt.widgets.Shell.WM_ACTIVATE(Shell.java:2193) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4659) 
    at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:339) 
    at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1633) 
    at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2117) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5050) 
    at org.eclipse.swt.internal.win32.OS.BringWindowToTop(Native Method) 
    at org.eclipse.swt.widgets.Decorations.bringToTop(Decorations.java:230) 
    at org.eclipse.swt.widgets.Shell.open(Shell.java:1244) 
    at org.eclipse.jface.window.Window.open(Window.java:799) 
    at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:330) 
    at zzz.dialogs.StatusmeldungDialog.openNotification(StatusmeldungDialog.java:83) 
    at zzz.parts.warnings.display.WarningsPart$3.onFinished(WarningsPart.java:228) 
    at zzz.actions.ZzzBackgroundJob$1$2.run(ZzzBackgroundJob.java:139) 
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) 
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135) 
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4155) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3772) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156) 
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:159) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) 
    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:606) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1515) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1488) 
+0

包括在E4应用org.eclipse.ui肯定是不对的。什么是'ZzzDateChooserCombo',它在1072行的功能是什么? –

+0

@ greg-449这是我们实现的星云DateChooserCombo。第1072行是直接从超类星云AbstractCombo的dropDown()方法中复制的代码。这绝对不是问题。事实上,这只是获得例外的一种方式。打开一个常规的JFace MessageDialog也会给你错误。我将添加一个额外的堆栈跟踪。 –

+0

只是一个猜测,但你有没有在Application.e4xmi(你应该)定义'org.eclipse.ui.contexts.dialog'绑定上下文? –

回答

0

它看起来像Eclipse无法找到org.eclipse.ui.contexts.dialog绑定上下文。

您需要在Application.e4xmi中定义默认绑定上下文。

的基本上下文应org.eclipse.ui.contexts.dialogAndWindow,它应该有两个孩子org.eclipse.ui.contexts.windoworg.eclipse.ui.contexts.dialog