我知道我无法在IDE之外加载单个图像(在众多图像中)。我正在使用ImageLoader
:
private Image loadImageFile(String path){
System.out.println("Load image: "+path);
URL imgPath = getClass().getResource(path);
Image img = null;
try {
img = ImageIO.read(imgPath);
}
catch(IllegalArgumentException | IOException e){
System.out.println("Cannot find file.");
}
return img;
}
传递给该函数的所有路径都以“/”开头。如输出中所示。这是Netbeans的输出:
Load image: /res/uvodBG.png
...
Load image: /res/userBG.png
Load image: /res/ruletaTopBG.jpg
...
Load image: /res/uvodRegBG.png
Netbeans下的一切运行正常,但是当我尝试运行.jar文件时:
Load image: /res/uvodBG.png
...
Load image: /res/userBG.png
Cannot find file.
Load image: /res/ruletaTopBG.jpg
...
Load image: /res/uvodRegBG.png
所以我的问题是,为什么,当从.jar文件运行它时,并非只有一个图像没有正确加载。
堆栈跟踪:
Lis 17, 2014 11:58:51 DOP. loader.ImageLoader loadImageFile
SEVERE: null
java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(ImageIO.java:1388)
at loader.ImageLoader.loadImageFile(ImageLoader.java:40)
at loader.ImageLoader.loadTexture(ImageLoader.java:31)
at viewParts.inner.UserInfoPanel.<init>(UserInfoPanel.java:66)
at viewParts.inner.RoomsInnerPanel.<init>(RoomsInnerPanel.java:82)
at viewParts.inner.LoginInnerPanel.<init>(LoginInnerPanel.java:80)
at viewParts.RuletteFrame.<init>(RuletteFrame.java:38)
at starter.NURRulette.main(NURRulette.java:20)
在UserInfoPanel.java:66是:
background = loader.loadTexture(BACKGROUND_PATH);
我在构造函数中调用loader实例,其中BACKGROUND_PATH是私有的最终字符串BACKGROUND_POR =“/ sts/userBG.png”;在同一个班级。
MANIFEST文件
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.2
Created-By: 1.8.0_05-b13 (Oracle Corporation)
Class-Path:
X-COMMENT: Main-Class will be added automatically by build
Main-Class: starter.NURRulette
jar文件的结构
所有图片,包括userBG.png,都在res
文件夹中。
ImageLoader.class
文件位于loader
文件夹中。