我正在创建自己的基于 GEF 的图形编辑器。它在验证失败时创建错误标记,并且编辑器有一个 gotoMarker 方法来查找和激活标记。这一切都有效。
唯一的问题是双击标记时出现RuntimeException(从上下文菜单中单击“GoTo”时没有问题)消息如下:
java.lang.RuntimeException: WARNING: Prevented recursive attempt to activate part org.eclipse.ui.views.ProblemView while still in the middle of activating part namespace.myEditorID`
部分相应的堆栈跟踪显示:
at org.eclipse.ui.internal.WorkbenchPage.setActivePart(WorkbenchPage.java:3586)
...
at org.eclipse.swt.widgets.Display.eventProc(Display.java:1245)
at org.eclipse.swt.internal.gtk.OS._gtk_enumerate_printers(Native Method)
at org.eclipse.swt.internal.gtk.OS.gtk_enumerate_printers(OS.java:9296)
at org.eclipse.swt.printing.Printer.getPrinterList(Printer.java:98)
at org.eclipse.gef.ui.actions.PrintAction.calculateEnabled(PrintAction.java:45)
at org.eclipse.gef.ui.actions.WorkbenchPartAction.isEnabled(WorkbenchPartAction.java:123)
...
完整的堆栈跟踪有点长,所以可以在pastebin获得。
这让我想到了通过删除来禁用ActionBarContributor .declareGlobalActionKeys 中的打印操作:
addGlobalActionKey(ActionFactory.PRINT.getId());
这解决了 RuntimeException ...?!
单击标记后,我看不到打印操作与转到相应对象之间的关系。当然,禁用打印操作不是解决方案。
那么我能做些什么来保持打印操作可用并防止这些 RuntimeExceptions 呢?