JAVA SWT无法获得图像相对路径

时间:2017-02-16 16:33:45

标签: java image swt eclipse-rcp rcp

我再次陷入使用Java RCP的SWT问题。

我想要的是什么:

我有一个复合材料,我想在其中加载一个图像。

目前的工作方式:

为此,我使用SWT Label,并调用方法setImage(image)。 图像(img.jpg)位于/ src / one旁边名为/ 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));

问题是什么? :

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

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

后工作

提前致谢。

Kosnyru。

2 个答案:

答案 0 :(得分:0)

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

然后使用FileLocator类使用相对路径查找图像:

// 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();

答案 1 :(得分:0)

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

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