加载在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"))