加载在ide中但未构建jar的Java映像

加载在ide中但未构建jar的Java映像,java,image,build,jar,embedded-resource,Java,Image,Build,Jar,Embedded Resource,我的文件路径如下所示: +------------+ +-----------------+ +------------------+ | | | | | | | src +-----------> com +--+---> application | |

我的文件路径如下所示:

  +------------+           +-----------------+      +------------------+
  |            |           |                 |      |                  |
  | src        +----------->  com            +--+--->  application     |
  |            |           |                 |  |   |                  |
  +------------+           +-----------------+  |   +------------------+
                                                |
                                                |   +------------------+
                                                |   |                  |
                                                +--->  resources       |
                                                    |                  |
                                                    +------------------+
我的代码在应用程序文件夹中,我要加载的图片在参考资料中

Im使用以下代码将图像从资源中获取到应用程序中的类中(图像是一个BuffereImage)

这似乎在我的IDE(intellij)中起作用,因为我可以看到加载的图像

但是,当我构建时,图像不会显示。我正在建造:

文件->项目结构->工件->绿色+>JAR->来自具有依赖项的模块->我的主类位置->提取到目标JAR

然后我构建工件->构建

因此,当我到达构建的jar的目的地并运行它时,没有任何图片被显示


我通过提取包含图片的jar来检查图像是否在构建的jar中,但是由于某种原因代码没有加载图片。

src路径在构建jar中不可用。您应该使用类加载器从类路径加载资源。例如(假设'src'是类路径根)


根据@MadProgrammer的建议进行编辑。

您可以尝试将资源用作流而不是文件

image = ImageIO.read(this.getClass().getClassLoader().getResourceAsStream("com/resources/Pad.png"))

这对我不起作用,我使用:
image=ImageIO.read(新文件(This.getClass().getClassLoader().getResource(“com/resources/Pad.png”).getPath())由于文件不使用URL,并且构建的jar没有显示图片。问题是:您的CLASP路径根是什么?我不知道,我如何找到它?使用
image=ImageIO.read(新文件(this.getClass().getClassLoader().getResource(“com/resources/Pad.png”).getPath())当我从IDE运行程序时可以看到图像,但是如果我构建它,当我运行jar时,图像不会被加载。
新文件(this.getClass().getClassLoader().getResource(“com/resources/Pad.png”)
已失效且毫无意义。嵌入在
Jar
文件中的资源将无法作为
文件访问,这就是使用
类#getResource
的全部意义。此外,由于
ImageIO.read
不接受
字符串,您只是在生成编译器错误-简单使用
this.getClass().getResource(“…”)
相反,请澄清
ImageIO
类的包。它是
javax.ImageIO
?它是
import javax.ImageIO.ImageIO;
永远不要在代码中引用
src
,因为您现在拥有的原因,它已经解决了这个问题,谢谢。这个流似乎使它工作了,您知道为什么它作为一个流而不是一个流工作吗当我使用文件时?@NotSoVisualBasic你知道什么是Jar文件吗?它只是一个基于Zip的文件。所以当你“Jar”你的项目时,所有的文件都存储在一个二进制文件中,这意味着“文件”不能再通过文件系统访问(因为它们不存在)相反,您需要使用API来查找并加载嵌入Jar文件中的资源(或者,作为一个巧妙的副作用,在类路径中)是的,我知道jar文件就像一个压缩的文件夹,但我没有意识到在构建之后,你将无法像在IDE中开发程序那样访问这些文件。不过谢谢你的解释!
image = ImageIO.read(new File(this.getClass()                   
.getResource("com/resources/Pad.png").getPath());
image = ImageIO.read(this.getClass().getClassLoader().getResourceAsStream("com/resources/Pad.png"))