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")));
我再次陷入了一个关于使用 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")));