0

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

4

1 回答 1

1

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

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

然后效果很好。

于 2013-09-17T05:22:53.817 回答