我如何修复IllegalArgumentException

时间:2015-07-09 17:50:48

标签: java illegalargumentexception

我知道之前已经问过这个问题,但我不确定为什么我的资源变为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);

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您应该想学习如何解释异常的堆栈跟踪:

  • javax.imageio.ImageIO.read报告了一个问题,它收到了一个空输入
  • BufferedImageLoader从表达式getClass().getResource(path)创建了该输入变量。因此,路径字符串无法转换为有效的资源URL
  • ImageManager第22行传递了一个路径变量,该路径变量最终无法转换为真实资源。

因此,最好访问ImageManager类的第22行,并检查引用的图像文件是否确实存在。