尝试通过ResourcesPlugin获取工作区时,“Workspace已关闭”异常

时间:2009-06-07 17:30:19

标签: eclipse plugins resources workspace

尝试通过ResourcesPlugin获取工作区时出现此错误:

java.lang.IllegalStateException: Workspace is closed.
at org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:339)

生成此代码的代码是:

IWorkspace ws = ResourcesPlugin.getWorkspace();

你能帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:15)

您的Manifest.MF是否包含org.eclipse.core.resources部分中的Require-bundle

您是否将测试作为插件启动? (而不是'Java应用程序')

另见this thread

如“Resources and the file system”帮助页面所述,

  

您可以从资源插件类(在org.eclipse.core.resources中定义)访问工作区。

     

当资源插件未运行时,工作空间仅存在于文件系统中,并由用户通过基于标准文件的工具进行查看或操作。我们来解释资源插件API时,让我们看看磁盘上的工作区是什么样的。


来自this book

  

无论使用-data调用选项定义的名称,工作区目录都有两个角色:

     
      
  • 它充当.metadata目录
  • 的父级   
  • 并作为项目的默认位置
  •   
     

工作空间只能在以下情况下包含项目:

     
      
  • org.eclipse.core.resources插件包含在配置中
  •   
  • 并从工作台
  • 开始   
     

这是基于org.eclipse.ui.ide.workbench应用程序的IDE配置自动生成的。

另见this thread并记住:

  

工作空间是与用于测试插件的运行时工作空间不同的工作空间。当您在Eclipse PDE环境中运行时,它会创建一个完全为空的新工作空间。

测试workspace root can be specified through the "-data"启动选项。

  

如果您想访问文件,最好将其包含在插件本身中,然后使用getClass().getResourceAsStream("/myfile.txt")获取可以阅读内容的InputStream

答案 1 :(得分:0)

尝试在插件中调用Plugin.getStateLocation(),它应该会为您创建工作区。如果没有这个,你也无法保存任何偏好。 http://dev.eclipse.org/newslists/news.eclipse.platform/msg45020.html

http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/runtime/Plugin.html#getStateLocation%28%29

呃,对不起 - 我刚刚意外地完成了这个问题:)