2016-12-06 4 views
0

В моем приложении RCP, когда я закрываю и повторно открываю проект PyDev, PyDev выдает исключение на консоли, жалуясь на то, что ресурс проекта не существует. Кажется, что все работает позже, но, конечно, я бы хотел избежать появления ложных исключений для моих пользователей.PyDev выбрасывается Исключение «Ресурс не существует» При повторном открытии проекта

Насколько я могу судить по навигации по трассировке стека, поставщик контента PyDev ожидает, что ресурс проекта будет существовать, а это не так. Возможно, я должен назвать некоторый API в PyDev, когда обнаруживаю закрытие проекта? Или это ошибка? Я заметил проблему в версии 5.1.2, но обновление до последней версии (5.4.0) не разрешило ее.

EDIT:

я обнаружил, что открытие проекта по right-click on project -> Open Project не бросает исключение. Только при открытии проекта, дважды щелкнув по нему. Двойной щелчок по открытому проекту не вызывает проблем, только дважды щелкните по закрытому. Кажется, что перенаправленное действие PyDev (PyOpenPythonFileAction) вызывается до того, как у фреймворка есть шанс фактически открыть проект.

EDIT2:

На самом деле это чужой, чем это. Повторное действие, которое генерирует исключение, равно PyOpenResourceAction (но это реализация run() в суперклассе PyOpenPythonFileAction, где он не работает). Исключение составляет строка 110 на if (viewer.isExpandable(container)) {. Код ресурса eclipse проверяет тип ресурса на некоторые биты флагов, и я не знаю, почему он возвращает false. Я поставил охрану только для проверки ресурсов, которые имеют тип Project, а проект существует и открыт, и он все еще не работает.

EDIT3:

В PyOpenPythonFileAction, Обертывание

if (viewer.isExpandable(container)) { 
    viewer.setExpandedState(container, !viewer.getExpandedState(container)); 
} 

в UIJob и придав ему мс задержки 500, кажется, чтобы исправить это.

Вот консольный вывод с трассировкой стека. Проект, который был закрыт и вновь открыт, называется «сайтом».

ENTRY org.python.pydev.shared_core 1 1 2016-12-06 16: 31: 28,037 MESSAGE Ресурс '/ сайт' не существует. ! STACK 1 org.eclipse.core.internal.resources.ResourceException: Resource '/ site' не существует. at org.eclipse.core.internal.resources.Resource.checkExists (Resource.java:335) at org.eclipse.core.internal.resources.Resource.checkAccessible (Resource.java:209) at org.eclipse. core.internal.resources.Project.checkAccessible (Project.java:141) at org.eclipse.core.internal.resources.Project.hasNature (Project.java:521) at org.eclipse.core.internal.resources. Project.getNature (Project.java:405) в org.python.pydev.plugin.nature.PythonNature.getPythonNature (PythonNature.java:809) в org.python.pydev.navigator.PythonBaseModelProvider.getChildrenForIResourceOrWorkingSet (PythonBaseModelProvider.java: 611) на org.python.pydev.navigator.PythonBaseModelProvider.getChildren (PythonBaseModelProvider.java:535) на org.python.pydev.navigator.PythonModelProvider.getChildren (PythonModelProvider.java:63) в org.python.pydev.navigator.PythonBaseModelProvider.hasChildren (PythonBaseModelProvider.java:510) в org.eclipse.ui.internal.navigator .extensions.SafeDelegateTreeContentProvider.HasChildren (SafeDelegateTreeContentProvider.java:112) на org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.callNormalHasChildren (NavigatorContentServiceContentProvider.java:444) на org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.pipelineHasChildren (NavigatorContentServiceContentProvider.java: 463) в org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.access $ 5 (NavigatorContentServiceContentProvider.java:447) в org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider $ 3.run (NavigatorContentServiceContentProvider.java:413) на org.eclipse.core.runtime.SafeRunner.run (SafeRunner.java:42) at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren (NavigatorContentServiceContentProvider.j AVA: 392) на org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren (NavigatorContentServiceContentProvider.java:436) на org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable (AbstractTreeViewer.java:2128) в орг. eclipse.jface.viewers.TreeViewer.isExpandable (TreeViewer.java:538) на org.python.pydev.navigator.actions.PyOpenPythonFileAction.run (PyOpenPythonFileAction.java:110) на org.eclipse.ui.actions.RetargetAction. бег (RetargetAction.java:225) в org.eclipse.ui.navigator.CommonNavigatorManager $ 2.Open (CommonNavigatorManager.java:191) в org.eclipse.ui.OpenAndLinkWithEditorHelper $ InternalListener.open (OpenAndLinkWithEditorHelper.java:46) at org.eclipse.jface.viewers.StructuredViewer $ 2.run (Структура dViewer.java:855) at org.eclipse.core.runtime.SafeRunner.run (SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil $ 1.run (JFaceUtil.java:50) at org .eclipse.jface.util.SafeRunnable.run (SafeRunnable.java:173) на org.eclipse.jface.viewers.StructuredViewer.fireOpen (StructuredViewer.java:852) на org.eclipse.jface.viewers.StructuredViewer.handleOpen (StructuredViewer.java:1169) на org.eclipse.ui.navigator.CommonViewer.handleOpen (CommonViewer.java:451) на org.eclipse.jface.util.OpenStrategy.fireOpenEvent (OpenStrategy.java:278) at org .eclipse.jface.util.OpenStrategy.access $ 2 (OpenStrategy.java:272) на org.eclipse.jface.util.OpenStrategy $ 1.handleEvent (OpenStrategy.java:313) на org.eclipse.swt.widgets.EventTable.sendEvent (EventTable.java:84) на org.eclipse.swt.widgets.Display.sendEvent (Display.java:5219) на org.eclipse.swt.widgets. Widget.sendEvent (Widget.java:1340) на org.eclipse.swt.widgets.Display.runDeferredEvents (Display.java:4553) на org.eclipse.swt.widgets.Display.readAndDispatch (Display.java:4143) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine $ 4.run (PartRenderingEngine.java:1121) at org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:336) на org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run (PartRenderingEngine.java:1022) на org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI (E4Workbench.java:150) на org.eclipse.ui.internal.Workbench $ 5.run (Workbench.java:687) на org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:336) на org.eclipse.ui .internal.Workbench.createAndRunWorkbench (Workbench.java:604) на org.eclipse.ui.PlatformUI.createAndRunWorkbench (PlatformUI.java:148) на my.package.MyApplication.start (MyApplication.java:137) в орг .eclipse.equinox.internal.app.EclipseAppHandle.run (EclipseAppHandle.java:196) на org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication (EclipseAppLauncher.java:134) в org.eclipse.core .runtime.internal.adaptor.EclipseAppLauncher.start (EclipseAppLauncher.java:104) на org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.Java: 388) в org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:243) на sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl .java: 62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at org.eclipse.equinox.launcher.Main .invokeFramework (Main.java:673) at org.eclipse.equinox.launcher.Main.basicRun (Main.java:610) at org.eclipse.equinox.launcher.Main.run (Main.java:1519) на org.eclipse.equinox.launcher.Main.main (Main.java:1492) SUBENTRY 1 org.eclipse.core.resources 4 368 2016-12 -06 16: 31: 28.095 ! СООБЩЕНИЕ Ресурс '/ site' не существует.

ответ

0

Вы, вероятно, есть ссылка на несуществующий проект site где-то в конфигурации проекта (так, пожалуйста, проверьте ваши .project и .pydevproject файлов в рабочей области для такого проекта).

+0

Спасибо, но нет ничего в любом .project файле, который, кажется, помогает при его удалении. Я попытался удалить все системные библиотеки, удалив сам интерпретатор, удалив природу pydev из проекта. Тем не менее, я получаю исключение PyDev, открывающее проект. Единственный способ сделать это не следует - исключить содержимое PyDev Navigator из Project Explorer в разделе «Настроить представление ... вкладка». Конечно, это просто удаляет возможности Pyev из проводника. – MidnightJava

+0

Просматривая трассировку стека, похоже, что PyDev пытается проверить, имеет ли проект PyDev-характер, а ресурс недоступен. В коде ресурса eclipse говорится, что проект должен существовать и быть открытым для доступа к нему. Но PyDev проверяет, что до получения природы (строки PythonBaseModelProvider 610-612), поэтому я не знаю, почему доступ выходит из строя вниз по течению. Вклад PyDev Comman Navigator, похоже, проверяет проект, о котором он знал, перед тем, как открывается этот проект. Вот почему мне интересно, нужно ли мне где-то де-регионировать. – MidnightJava

+0

Я думаю, что я, возможно, нашел проблему. Похоже, что добавленный элемент DeleteParticipant вызывает эту проблему. Я удалил слушателей смены ресурсов в своем тестировании, но не заметил участника удаления. Я позже опубликую, надеюсь, с конкретным описанием того, что делал мой код, что вызывало проблему. – MidnightJava

Смежные вопросы