我正在开发一个显示大量图像的Java应用程序。问题是我无法弄清楚如何让Java找到这些图像。
我在Stackoverflow上已经关注了几个教程和答案,但我仍然没有设法找到一个无论OS(Linux或Windows)和运行方法(嵌入在eclipse或导出的jar文件中)都能正常工作的解决方案。这可能是因为我仍然是新手。
我创建了一个类,我称之为myIcon,通过这个类我的意思是访问所有这些图像。在下面的代码中,我想将字符串“resources / icon / image.gif”传递给函数getIconPath。输出应该是此图像的ImageIcon,因为此文件存在。尽管如此,如果我将不存在的图像的路径传递给此函数,则应返回null。在这种情况下,我的应用程序将显示默认图像(红色x)。
public class MyIcon {
// some other functions and properties
private static final ImageIcon getIconPath(String path) {
File f = new File(path);
if (f.exists()) {
return new ImageIcon(path, "");
} else {
return null;
}
}
}
resources文件夹是我目录结构中src文件夹的兄弟。也就是说,资源和src都是根目录的子文件夹。
当我运行上面的代码时,找不到任何图像。因此始终显示默认图像,getIconPath返回null。
我也知道ClassLoader的getResource方法,但我仍然不明白应该如何使用这些东西。
答案 0 :(得分:0)
在eclipse中运行时,应打印出f.getAbsolutePath()
。它可能并不指向您的文件。更一般地说,您希望将文件作为资源访问。参见:
https://docs.oracle.com/javase/tutorial/deployment/webstart/retrievingResources.html
答案 1 :(得分:0)
这有两个部分 - 确保在构建jar时,图像是其中的一部分,并访问jar中的资源。
对于第一部分,我猜测无论你用什么来构建一个jar,它都会把你的图像放到META-INF文件夹中,这个文件应该没有太多问题(如果不存在,或者使用生成的jar中的Java类/源,可能导致查找失败)
第二部分还有另一个Stack Overflow Post。关键是要确保要加载的图像位于类路径上。
希望这有帮助!
答案 2 :(得分:0)
如果resources
位于类路径中,您可以使用getResource(String name)
或getResourceAsStream(String name)
在类路径中找到图像。
但是,在一个简单的Java项目中,甚至将resources
添加到构建路径中,如下所示:
它只会将文件夹内容(换句话说,只是icon/...
)放到bin
文件夹中,如下所示:
因此,由于resources
不在类路径中,只是icon
,要检索图像,您只需要通知路径/icon/image.gif
,就像这样:
URL url = YourClass.class.getResource("/icon/image.gif");
ImageIcon icon = new ImageIcon(url);