【问题标题】:Relative filepath to access resources访问资源的相对文件路径
【发布时间】:2016-07-18 17:21:42
【问题描述】:

我对 Eclipse 4、RCP 和 SWT 还是很陌生,我被这个问题困住了: 我想从具有相对文件路径的代码中访问图像资源。问题是默认位置./ 设置为我的主目录/home/name/(我使用的是Ubuntu)。我发现通过创建一个新文件并打印它的 CanonicalPath。

我习惯于将默认位置设置为项目目录,例如/home/name/workspace/project/,从我目前看到的情况来看,这是Eclipse/java程序中的默认行为。

我想保留这种行为,因为它对我来说似乎更可靠(例如在部署之后)。

注意:我标记了 e4、rcp 和 swt,因为我不确定是哪一个导致了差异。

【问题讨论】:

  • 这是插件、RCP 还是 SWT 应用程序?
  • 你可以尝试使用 Classname.class.getClassLoader().getResource(name); ?
  • 正如我所说,作为新手,我不能 100% 确定它们的关系和差异。 (不幸的是,无论如何我都必须使用它们)。我可以说我正在使用我认为来自 RCP 的 @Inject@PostConstruct 注释。而且我还使用 SWT 创建窗口等。长话短说,我会说 RCP。我希望我是对的。 (实际上,我会将其添加到我的问题中)
  • @KirickParty 我现在正在看这个,但似乎 SWT 不允许 URL 作为图像路径。
  • @KirickParty 好吧,它似乎找不到文件。

标签: java swt rcp e4


【解决方案1】:

在 Eclipse 插件(包括 RCP 代码)中,您应该使用 FileLocator 类在插件中查找资源。

您将资源作为流打开:

Bundle bundle = ... plugin bundle

IPath path = new Path("path relative to plugin root");

InputStream is = FileLocator.openStream(bundle, path, true);

你也可以使用FileLocator.find:

URL url = FileLocator.find(bundle, path, null);

URL fileUrl = FileLocator.toFileURL(url);

不要忘记在build.properties 中包含您的资源目录。

如果你的图片不在插件中,你就不能真正使用相对路径。

在 e4 插件中,您可以使用 @OSGiBundle 注入 Bundle

@Inject
@OSGiBundle
Bundle bundle;

@OSGiBundle 需要依赖 org.eclipse.e4.core.di.extensions 插件)。

【讨论】:

  • 我不确定如何获取 Bundle 对象。我尝试通过注入但它不起作用。
  • 我需要更多的东西吗?因为它无法解析@OSGiBundle 注解。不过org.osgi.framework.Bundle 没有问题。
  • 插件依赖需要添加org.eclipse.e4.core.di.extensions
  • 好吧,现在它可以工作了 :) 我还犯了另一个错误,即在构造函数中访问 bundle 而不是 @PostConstruct 方法,所以它保持在 null。不管怎样,它现在找到了我的形象,所以一切都很好。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-08-03
  • 2016-12-12
  • 1970-01-01
  • 2020-10-31
  • 2017-07-18
  • 2010-12-08
  • 2011-12-15
  • 1970-01-01
相关资源
最近更新 更多