2016-12-06 25 views
0

在我的RCP應用程序中,當我關閉並重新打開PyDev項目時,PyDev在控制檯上拋出異常,抱怨項目資源不存在。一切似乎都在後面工作,但我當然想避免給我的用戶顯示一個虛假的例外。PyDev拋出異常「資源不存在」當重新打開項目

盡我所知,通過瀏覽堆棧跟蹤,PyDev的內容提供者期望項目資源存在,而不是。也許我應該在PyDev中調用一些API,當我檢測到項目關閉時?或者這是一個錯誤?我注意到版本5.1.2的問題,但升級到最新版本(5.4.0)沒有解決它。

編輯:

我發現,通過right-click on project -> Open Project開盤項目並不拋出異常。只有在雙擊它才能打開項目時。雙擊打開的項目不會導致問題,只需雙擊關閉的項目即可。在框架有機會實際打開項目之前,似乎PyDev重新定位動作(PyOpenPythonFileAction)正在被調用。

編輯2:

其實它比這更奇怪。拋出異常的重定向操作是PyOpenResourceAction(但是它的run()實現在超類PyOpenPythonFileAction中失敗)。在if (viewer.isExpandable(container)) {的第110行拋出異常。那裏的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月6日16:31:28.037 消息資源 '/網站' 不存在。 !STACK 1 org.eclipse.core.internal.resources.ResourceException:資源'/ 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) at org.python.pydev.plugin.nature.PythonNature.getPythonNature(PythonNature.java:809) at org.python.pydev.navigator.PythonBaseModelProvider.getChildrenForIResourceOrWorkingSet(PythonBaseModelProvider.java: 611) at org.python.pydev.navigator.PythonBaseModelProvider.getChildren(PythonBaseModelProvider.java:535) at org.python.pydev.navigator.PythonModelProvider.getChildren(PythonModelProvider.java:63) at org.python.pydev.navigator.PythonBaseModelProvider.hasChildren(PythonBaseModelProvider.java:510) at 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) at org.python.pydev.navigator.actions.PyOpenPythonFileAction.run(PyOpenPythonFileAction.java:110) at org.eclipse.ui.actions.RetargetAction。運行(RetargetAction.java:225) at org.eclipse.ui.navigator.CommonNavigatorManager $ 2.open(CommonNavigatorManager.java:191) at org.eclipse.ui.OpenAndLinkWithEditorHelper $ InternalListener.open(OpenAndLinkWithEditorHelper.java:46) 在org.eclipse.jface.viewers.StructuredViewer $ 2.run(Structure dViewer.java:855) 在org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 在org.eclipse.ui.internal.JFaceUtil $ 1.run(JFaceUtil.java:50) 在組織.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173) at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:852) at 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) 在有機.eclipse.jface.util.OpenStrategy.access $ 2(OpenStrategy.java:272) at org.eclipse.jface.util.OpenStrategy $ 1.handleEvent(OpenStrategy.java:313) 在org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5219) at 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) 在org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine $ 4.run(PartRenderingEngine.java:1121) 在org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150) at org.eclipse.ui.internal.Workbench $ 5.run(Workbench.java:687) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.ui .internal.Workbench.createAndRunWorkbench(Workbench.java:604) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148) at my.package.MyApplication.start(MyApplication.java:137) at org .eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core .runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at 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) at org.eclipse.equinox.launcher.Main.main(Main.java:1492) !SUBENTRY 1 org.eclipse.core.resources 4 368 2016-12 -06 16:31:28.095 !MESSAGE資源'/ site'不存在。

回答

0

你可能有一些參考一個不存在的site項目某處你的項目配置(所以,請檢查工作區中的.project.pydevproject文件這樣的項目)。

+0

謝謝,但沒有什麼.project文件似乎有助於刪除它。我嘗試刪除所有的系統庫,刪除解釋器本身,從項目中刪除pydev的性質。我仍然得到一個PyDev異常打開該項目。使其不發生的唯一方法是在自定義視圖...內容選項卡中從項目資源管理器中排除PyDev導航器內容。當然,這只是從資源管理器中刪除Pyev功能 – MidnightJava

+0

通過堆棧跟蹤,它看起來像PyDev正在嘗試檢查項目是否具有PyDev性質,並且資源無法訪問。那裏的eclipse資源代碼表示該項目必須存在並且可以爲其開放。但是PyDev在得到性質(PythonBaseModelProvider行610-612)之前檢查它,所以我不知道爲什麼訪問失敗。在項目啓動之前,PyDev的Comman Navigator貢獻似乎正在檢查一個它曾經知道的項目。這就是爲什麼我想知道我是否需要在某處註銷某些東西。 – MidnightJava

+0

我想我可能已經發現了這個問題。它看起來像我加入的DeleteParticipant導致了這個問題。我在測試中刪除了資源更改偵聽器,但忽略了刪除參與者。我稍後會發布關於我的代碼在做什麼導致問題的具體描述。 – MidnightJava