我知道之前已经问过这个问题,但我不确定为什么我的资源变为null,它们已经正确地添加到构建路径中。此外,图像显示正在阅读,但出于某种原因我得到了这个。
java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
at game.model.image.BufferedImageLoader.loadImage(BufferedImageLoader.java:14)
at game.model.gfx.ImageManager.<init>(ImageManager.java:22)
at game.model.ui.Menu.<init>(Menu.java:26)
at game.Game.<init>(Game.java:49)
at game.Game.main(Game.java:173)
第一行指向此
image = ImageIO.read(getClass().getResource(path));
在这堂课中。
public class BufferedImageLoader {
private BufferedImage image;
public BufferedImage loadImage(String path) {
try {
image = ImageIO.read(getClass().getResource(path));
} catch (IOException e) {
e.printStackTrace();
}
return image;
}
}
这就是我使用图像的方式。
public class ImageManager {
public BufferedImage mainMenu, play, playh, menu, menuh,
exit, exith, help, helph, banner;
public ImageManager() {
BufferedImageLoader loader = new BufferedImageLoader();
try {
banner = loader.loadImage("/images/banner.png");
mainMenu = loader.loadImage("/images/menubg.png");
play = loader.loadImage("/images/play.png");
playh = loader.loadImage("/images/playh.png");
help = loader.loadImage("/images/help.png");
helph = loader.loadImage("/images/helph.png");
exit = loader.loadImage("/images/exit.png");
exith = loader.loadImage("/images/exith.png");
menu = loader.loadImage("/images/menu.png");
menuh = loader.loadImage("/images/menuh.png");
} catch(Exception e) {
e.printStackTrace();
}
}
}
最后,这就是我实际显示图像的方式。
//main menu background
g2d.drawImage(im.mainMenu, 0, 0, Game.WIDTH, Game.HEIGHT- 40, null);
//banner on main menu
g.drawImage(im.banner, 65, 30, 478, 73, null);
//play button on main menu
g.drawImage(im.play, 70, 150, 200, 64, null);
//help button on main menu
g.drawImage(im.help, 70, 250, 200, 64, null);
//exit button on main menu
g.drawImage(im.exit, 70, 350, 200, 64, null);
有什么想法吗?
答案 0 :(得分:1)
您应该想学习如何解释异常的堆栈跟踪:
getClass().getResource(path)
创建了该输入变量。因此,路径字符串无法转换为有效的资源URL 因此,最好访问ImageManager类的第22行,并检查引用的图像文件是否确实存在。