【发布时间】:2011-07-01 00:07:18
【问题描述】:
我有这样的文件夹结构。
Project/src/folder/folder/folder/xyz.java
/img/background.jpg
我想把 background.jpg 放到 xyz.java 的 JPanel 中。只是为了背景。
我已经做到了
private ImageIcon createImageIcon(String path, String description) {
java.net.URL imgURL = getClass().getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
但这里的问题是图像必须与xyz.java 位于同一文件夹中
我搜索了一下,发现这可以用getResourceAsStream("path") 解决,但我无法提供足够的知识来解决这个问题。
这对我来说很重要,因为我想在不同的操作系统上以 *.jar 文件的形式运行我的程序。
我的问题是我不明白 getRessourceAsStream("path") 应该如何以不同的方式工作。我没有找到适合我的教程。似乎大多数人将它用于不同的 .jar 文件或 Applet。而且我不知道 Stream 可以做什么, getRessourceAsStream("path") 从哪里开始(意味着我必须如何编写路径)。知识太少了……
编辑:我找到了一个无需提供总路径的解决方案。
img = ImageIO.read(getClass().getResource("../../../../img/bg_1.jpg"));
我没有测试它,但它也应该在其他系统上运行。但问题是,我只能在 Eclipse 中启动我的程序。当我将它导出到 *.jar 文件中时,它发生得很好,但它不会加载图片。即使我设置了PreferredSize,它也会将窗口缩小到最小。
所以我也许应该解决 Stream 解决方案。但现在该睡觉了。
编辑:当我将图像放入包中时,相对路径可以正常工作。不是我真正想要的,但在猜测这个小问题 6 小时后,我不得不带一些鱼在我的海洋中游泳......
【问题讨论】:
-
拥有 Java 编译器的好处就是 — 您在桌面上拥有自己的实验室,您可以尽情尝试。所以在那张纸条上,你尝试了什么,发生了什么?此外,如果您对获取背景图像感兴趣,为什么要处理 ImageIcons 而不仅仅是 BufferedImages?
标签: java swing background icons jlabel