我在编译代码时遇到了NullPointerException
,但它在eclipse中工作正常。
命令提示符下的错误日志:
java.lang.NullPointerException
at sun.awt.image.URLImageSource.getConnection(Unknown Source)
at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
at sun.awt.image.ImageFetcher.run(Unknown Source)
获取图像的类是:
package tileGame;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
public class Image {
public String address1;
public String address2;
public String name;
public String type;
public java.awt.Image image;
public Image(String name){
address1 = System.getProperty("user.dir");
address2 = "/Resources/Images/";
type = "png";
this.name = name;
}
public Image(String name, String type){
address1 = System.getProperty("user.dir");
address2 = "/src/Resources/Images/";
this.type = type;
this.name = name;
}
public Image(String name, String type, String address){
address1 = System.getProperty("user.dir");
this.address2 = address;
this.type = type;
this.name = name;
}
public void loadImage(){
//image = new ImageIcon(address1 + address2 + name + "." + type).getImage();
image = new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource(address2 + name + "." + type))).getImage();
System.out.println("Image Loaded '" + name + "' at '" + address2 + name + "." + type + "'");
}
}
这可能是一个很好的理由,我不能看到因为我对Java很新,所以如果有人能给我一些指示,那么这将是受欢迎的。
编辑:好的,我修复了一个常见的人为错误,我不会自己发现。感谢。
答案 0 :(得分:3)
getClass().getResource(path)
访问类路径中的资源“文件”(只读)。如果编译应用程序,则此文件驻留在jar内。使用7zip或WinZip,您可以查看jar内部并找到路径。
路径使用任何URL /
作为路径分隔符。
路径可以相对于类(记住getClass()
),即包路径。
路径也可以是jar根的绝对路径:“/...”。
此外,路径必须区分大小写,而不是Windows文件路径。
在您的情况下,不需要任何系统属性来获取文件系统路径。
答案 1 :(得分:0)
这是因为相对路径问题。 java.exe
从eclipse和命令提示符中的不同目录开始。
确保它有效:
-cp
并将必要的目录添加到classpath
。答案 2 :(得分:0)