单击标记时“阻止递归尝试激活部分”

时间:2012-01-26 16:10:07

标签: eclipse eclipse-gef

我正在创建自己的基于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?

1 个答案:

答案 0 :(得分:1)

作为测试,我参考网址:https://bugs.eclipse.org/bugs/show_bug.cgi?id=154112 我覆盖了我的EditorPart setFocus方法,如:

@Override
public void setFocus() {
    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setFocus();
}

然后效果很好。