Exception in thread "main" java.lang.IllegalArgumentException: input == null!问题,GameUtil类的解释

最近复习java基础的时候,做了一个小游戏,出现了一个错误,困扰了我很久!

Exception in thread "main" java.lang.IllegalArgumentException: input == null!问题,GameUtil类的解释

其中就用到了GameUtil这么一个类代码如下:

package com.zhazhahui.game;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
 
public class GameUtil {
    // 工具类最好将构造器私有化。
    private GameUtil() {
     
    } 
 
    public static Image getImage(String path) {
        BufferedImage bi = null;
        try {
            URL u = GameUtil.class.getClassLoader().getResource(path);
            System.out.println(u);
            bi = ImageIO.read(u);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bi;
    }
}

值得注意的是其中 URL u = GameUtil.class.getClassLoader().getResource(path);这段代码是获得GameUtil类的编译文件目录下某文件的路径。其中.class.getClassLoader().getResource(“”)是得到类编译文件的路径,所以.getResource()中参数必须是在此路径下的某文件路径,否则就会报错!

在做这个小游戏的人群能力参差不齐,使用的编辑器也有所不同,一些有过web项目经验的朋友,习惯在web项目下来做这个小游戏,其项目的目录结构和普通java项目的目录结构是不同的,所以不能完全根据视频去用这个类。

 

解决办法:

在GameUtil中使用 URL u = GameUtil.class.getClassLoader().getResource(“”);  System.out.println(u);

获得类.class文件的路径

Exception in thread "main" java.lang.IllegalArgumentException: input == null!问题,GameUtil类的解释

然后将images文件夹放置在此路径下。将上面的代码还原就可以正常使用了。

Exception in thread "main" java.lang.IllegalArgumentException: input == null!问题,GameUtil类的解释