需要 NullPointExceptionError 帮助

NullPointExceptionError help needed

我想将图标应用到我的程序中,但它给我一个错误。看起来一切都很好,这就是为什么我不知道它有什么问题。

public static ImageIcon createIcon (String path) {
    URL url = System.class.getResource(path);

    if(url == null) {
        System.err.println("Unable to load image: " + path);
    }

    ImageIcon icon = new ImageIcon(url); //here is line 30 in class Utils

    return icon;
}

他的错误是:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.desktop/javax.swing.ImageIcon.<init>(ImageIcon.java:217)
    at gui.Utils.createIcon(Utils.java:30)

问题是 urlnull。检查构造函数的实现方式:

public ImageIcon (URL location) {
    this(location, location.toExternalForm());
}

如果 locationnulllocation.toExternalForm() 将抛出 NullPointerException

事实上,如果 pathnull,那也会导致 NullPointerException。查看 getResource 是如何实现的。

public URL getResource(String name) {
    name = resolveName(name);
    //...
}

private String resolveName(String name) {
    if (!name.startsWith("/")) {
        Class<?> c = this;
        while (c.isArray()) {
            c = c.getComponentType();
        }
        String baseName = c.getPackageName();
        if (baseName != null && !baseName.isEmpty()) {
            name = baseName.replace('.', '/') + "/" + name;
        }
    } else {
        name = name.substring(1);
    }
    return name;
}

如您所见,如果 namenullname.startsWith("/") 将抛出 NullPointerException

按如下操作:

public static ImageIcon createIcon (String path) {
    if(path == null) {
        System.err.println("Path is null");
        return null;
    }

    URL url = System.class.getResource(path);
    ImageIcon icon = null;

    if(url != null) {
        icon = new ImageIcon(url);
    } else {
        System.err.println("Unable to load image: " + path);
    }

    return icon;
}