我有这样的文件夹结构。
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"));
我没有测试它,但它也应该在其他系统上运行。但问题是,我只能在日食中启动我的程序。当我将它导出到* .jar文件时,它很好但它没有加载图片。即使我已经setPreferredSize,它也会将窗口缩小到最小。
所以我应该可以使用Stream解决方案。但现在是床上用品。
编辑:当我将图像放入包中时,相对路径工作正常。不是我真正想要的,但在6小时后猜测这个小问题我不得不带一些鱼在我的海洋中游泳......
答案 0 :(得分:5)
由于您没有回复我的评论,我会提出一些问题并提出建议作为答案:
是否全部包含在Jar文件中?您是否尝试将路径传递到命令行上的映像或映像目录,并将其作为命令行参数读入?再次,为什么在显示图像而不是ImageIcon时使用ImageIcons?
编辑1
关于你的意见:
我正在使用ImageIcon,因为freenode.net上的## java告诉我它符合我的习惯。
我不知道## java是谁,也不知道你习惯的“习惯”,但目前的情况是你使用的是Image而ImageIcon与此无关,所以真的,摆脱它的。简化并只使用您需要的东西。
我的第一个解决方案是这样的:img = ImageIO.read(new File(“path”));但它还需要完整的路径,而不是我从html中知道的一些URL路径。
ImageIO.read的路径要求与您尝试的操作没有什么不同。它是您解决方案的一个很好的补充。
Jar文件可以在不同的操作系统上运行而无需任何额外的操作。我只需要其中一个。
你还没有告诉我们你的图像是否在一个罐子里,图像与你的类文件有关,因为这是使用资源的关键 - 加载相对于你的位置的资源类文件。
答案 1 :(得分:3)
Loading Images Using getResource
当您以实际大小显示图像时,在JLabel上使用ImageIcon非常有用。
如果你需要(动态)缩放图像或任何东西(比如那样),那么你需要用图像进行自定义绘画。