我有一个PropertyTester
通过主工具栏上的visibleWhen
调用,在应用程序启动时抛出以下异常:
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.eclipse.e4.ui.workbench.renderers.swt.ToolBarContributionRecord.updateVisibility(ToolBarContributionRecord.java:70)
at org.eclipse.e4.ui.workbench.renderers.swt.ToolBarManagerRenderer$5.changed(ToolBarManagerRenderer.java:479)
at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:114)
at org.eclipse.e4.core.internal.contexts.EclipseContext.runAndTrack(EclipseContext.java:324)
at org.eclipse.e4.ui.workbench.renderers.swt.ToolBarManagerRenderer.processAddition(ToolBarManagerRenderer.java:471)
at org.eclipse.e4.ui.workbench.renderers.swt.ToolBarManagerRenderer.generateContributions(ToolBarManagerRenderer.java:447)
at org.eclipse.e4.ui.workbench.renderers.swt.ToolBarManagerRenderer.processContribution(ToolBarManagerRenderer.java:413)
我真的认为E4应该能够应对工具项目"突然之间#34;消失。此外,由于所讨论的属性测试器ALWAYS返回false,因此工具项甚至在开始时都不可见。
我可以将异常跟踪到以下行(请记住,导致异常的属性测试器甚至不存在于堆栈跟踪中):
PlatformUI.getWorkbench().getActiveWorkbenchWindow()
如果我在test(...)
的{{1}}方法中添加该行,则会发生异常。如果我删除它不会。因此,显示错误的最小示例是:
PropertyTester
我绝对难以理解为什么会发生这种异常,以及如何防止它发生。 public final class MyPropertyTester extends PropertyTester {
@Override
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
PlatformUI.getWorkbench().getActiveWorkbenchWindow();
return false;
}
}
永远不会返回null或抛出异常。 getActiveWorkbenchWindow()
也没有返回true,即使我的猜测是在发生错误时仍然会运行某种初始化。
(注意:除了非常丑陋之外,该异常不会影响应用程序的工作方式。)
如何防止此异常?
答案 0 :(得分:0)
添加PropertyTester
测试方法中的第一行,如
if (!(receiver instanceof IEditorPart)) return false;
避免执行注定要失败的代码并使用receiver
来计算返回值。
请参阅: