Python PyDev抛出异常";“资源不存在”;重新打开项目时
在我的RCP应用程序中,当我关闭并重新打开PyDev项目时,PyDev在控制台上抛出一个异常,抱怨项目资源不存在。之后一切似乎都正常,但我当然希望避免向我的用户显示虚假的异常 从堆栈跟踪中导航可以看出,PyDev的内容提供者期望项目资源存在,而事实并非如此。也许我应该在检测到项目关闭时调用PyDev中的一些API?还是这是一只虫子?我注意到5.1.2版的问题,但是升级到最新版本(5.4.0)并没有解决这个问题 编辑: 我发现通过Python PyDev抛出异常";“资源不存在”;重新打开项目时,python,eclipse,eclipse-rcp,pydev,Python,Eclipse,Eclipse Rcp,Pydev,在我的RCP应用程序中,当我关闭并重新打开PyDev项目时,PyDev在控制台上抛出一个异常,抱怨项目资源不存在。之后一切似乎都正常,但我当然希望避免向我的用户显示虚假的异常 从堆栈跟踪中导航可以看出,PyDev的内容提供者期望项目资源存在,而事实并非如此。也许我应该在检测到项目关闭时调用PyDev中的一些API?还是这是一只虫子?我注意到5.1.2版的问题,但是升级到最新版本(5.4.0)并没有解决这个问题 编辑: 我发现通过右键单击project->Open project打开项目不会引发异
右键单击project->Open project
打开项目不会引发异常。仅当通过双击打开项目时。双击打开的项目不会导致问题,只需双击关闭的项目即可。在框架有机会实际打开项目之前,PyDev重新定向操作(PyOpenPythonFilaction)似乎已经被调用
编辑2:
事实上,比这更奇怪。引发异常的重定目标操作是PyOpenResourceAction
(但失败的是超类pyopenpythonfilection
中的run()
实现)。异常在if(viewer.isExpandable(container)){
的第110行抛出。那里的eclipse资源代码正在根据一些标志位检查资源类型,我不知道为什么它返回false。我设置了一个保护,只检查属于Project类型的资源,并且该项目存在且已打开,但仍然失败
编辑3:
在pyopenpythonfilection
中,包装
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
!消息资源“/site”不存在。
!堆栈1
org.eclipse.core.internal.resources.ResourceException:资源“/site”不存在。
位于org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:335)
位于org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:209)
位于org.eclipse.core.internal.resources.Project.checkAccessible(Project.java:141)
在org.eclipse.core.internal.resources.Project.hasneature(Project.java:521)上
位于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.haschilds(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)
位于org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:392)
位于org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:436)
在org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable上(AbstractTreeViewer.java:2128)
位于org.eclipse.jface.viewers.TreeViewer.isExpandable(TreeViewer.java:538)
位于org.python.pydev.navigator.actions.PyOpenPythonFileAction.run(PyOpenPythonFileAction.java:110)
位于org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:225)
位于org.eclipse.ui.navigator.CommonNavigatorManager$2.open(CommonNavigatorManager.java:191)
位于org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:46)
位于org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:855)
位于org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
位于org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50)
位于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)上
访问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)上
在org.eclipse.e4.ui.internal.workben