getResourceAsStream("path")的背景

fro*_*hli 3 java icons swing background jlabel

我有这样的文件夹结构.

Project/src/folder/folder/folder/xyz.java
       /img/background.jpg
Run Code Online (Sandbox Code Playgroud)

我想将background.jpg放入JPanel中xyz.java.仅为背景.而且我已经完成了

    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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是图像必须与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小时后猜测这个小问题我不得不带一些鱼在我的海洋中游泳......

Hov*_*els 5

既然你没有回复我的评论,我会问一些问题并提出建议作为答案:

是否全部包含在Jar文件中?您是否尝试将路径传递到命令行上的映像或映像目录,并将其作为命令行参数读入?再次,为什么在显示图像而不是ImageIcon时使用ImageIcons?

编辑1
关于您的意见:

我正在使用ImageIcon,因为freenode.net上的## java告诉我它符合我的习惯.

我不知道谁## java是什么,也不知道你习惯的"习惯",但目前的情况是你正在使用Image而ImageIcon与此无关,所以真的,摆脱它.简化并只使用您需要的东西.

我的第一个解决方案是这样的:img = ImageIO.read(new File("path")); 但它还需要完整的路径,而不是我从html中知道的一些URL路径.

ImageIO.read的路径要求与您尝试的操作没有什么不同.它是您解决方案的一个很好的补充.

Jar文件可以在不同的OS上运行而不需要任何额外的东西.我只需要其中一个.

你仍然没有告诉我们你的图像是否在jar中,以及图像与你的类文件有关,因为这是使用资源的关键 - 相对于类文件的位置加载资源.