JAVA SWT 无法获取图片相对路径

JAVA SWT Can't get the image relative path

我再次陷入了一个关于使用 Java RCP 的 SWT 的问题。

我想要什么:

我有一个 Composite,我想在其中加载图像。

目前是如何完成的:

为此,我使用了一个 SWT 标签,并调用了方法 setImage(image)。 图片 (img.jpg) 位于 /src/ 目录旁边的 /img/ 目录中。该目录已添加到构建路径中。这是一个屏幕来说明: directories

我这样称呼这张图片:

InputStream is = getClass().getClassLoader().getResourceAsStream("/img/img.jpg");
ImageData imageData = new ImageData(is);
Label label = new Label(picRoom, SWT.NONE);
label.setImage(new Image(display, imageData));

有什么问题吗? :

,当我启动项目时,一切正常。图像加载并完美显示。但是当我导出它时,图像不再存在了。问题实际上来自路径。当我将图像制作为 new Image(display, absolutePathToTheImage) 时,即使导出它也会加载。但是我想要 /img/ 目录中的图像,因为如果我从另一台计算机的 .exe 启动项目,我希望它有图片,无论它在哪里(所以在 /img/ 中)。

我在互联网上尝试了很多解决方案(尤其是使用 URL),但没有一个有效。正如我所说,我需要图像位于 /img/ 目录中并采用相对路径。当然,在将项目导出为 .exe 后才能工作。

提前致谢。

科斯尼鲁

首先确保您的 img 目录包含在 build.properties 包含中,以便它包含在导出的插件中。

然后使用FileLocator class使用相对路径查找图片:

// Your plugin's bundle - there are several ways to get this
Bundle bundle = FrameworkUtil.getBundle(getClass());

// Relative path in the plugin
String path = "/img/img.jpg";

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

ImageDescriptor imageDesc = ImageDescriptor.createFromURL(url);

Image image = imageDesc.createImage();

假设您的文件在 resources 目录中,您可以执行如下操作:

JLabel label = new JLabel(new ImageIcon(this.getClass().getResource("/logo.png")));