«Предотвращена рекурсивная попытка активировать деталь» при нажатии на маркер - PullRequest
0 голосов
/ 26 января 2012

Я создаю свой собственный графический редактор на основе GEF.Он создает маркеры ошибок при сбое проверки, и в редакторе есть метод gotoMarker для поиска и активации маркера.Это все работает.

Единственная проблема в том, что я получаю исключение RuntimeException при двойном щелчке по маркеру (при нажатии «Перейти» в контекстном меню проблем нет) Сообщение выглядит следующим образом:

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 Ответ

1 голос
/ 17 сентября 2013

В качестве теста я обращаюсь к URL: https://bugs.eclipse.org/bugs/show_bug.cgi?id=154112 и переопределяю метод setFocus моего EditorPart, например:

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

, и тогда он работает хорошо.

...