我再次陷入使用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。
答案 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")));