需要 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)
问题是 url
是 null
。检查构造函数的实现方式:
public ImageIcon (URL location) {
this(location, location.toExternalForm());
}
如果 location
是 null
,location.toExternalForm()
将抛出 NullPointerException
。
事实上,如果 path
是 null
,那也会导致 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;
}
如您所见,如果 name
是 null
,name.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;
}
我想将图标应用到我的程序中,但它给我一个错误。看起来一切都很好,这就是为什么我不知道它有什么问题。
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)
问题是 url
是 null
。检查构造函数的实现方式:
public ImageIcon (URL location) {
this(location, location.toExternalForm());
}
如果 location
是 null
,location.toExternalForm()
将抛出 NullPointerException
。
事实上,如果 path
是 null
,那也会导致 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;
}
如您所见,如果 name
是 null
,name.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;
}