0

我在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 还很陌生,所以如果有人能给我一些指示,那将是受欢迎的。

编辑:好的,我修复了我自己不会发现的常见人为错误。谢谢。

4

3 回答 3

3

getClass().getResource(path)访问类路径中的资源“文件”(只读)。如果应用程序已编译,则此文件位于 jar 中。使用 7zip 或 WinZip,您可能会查看 jar 内部并找到路径。

该路径与任何 URL/一样用作路径分隔符。路径可以相对于类(记住getClass()),即包路径。路径也可以是 jar 根的绝对路径:“/...”。

此外,路径必须区分大小写,而不是 Windows 文件路径。

在您的情况下,不需要任何系统属性来获取文件系统路径。

于 2013-06-08T18:35:40.493 回答
0

这是因为相对路径问题。java.exe从 eclipse 和命令提示符中的不同目录开始。

为了确保它有效:

  1. 使用绝对路径(确认问题)
  2. 运行程序时,使用-cp并将必要的目录添加到classpath.
于 2013-06-08T18:24:40.773 回答
0

此类没有编译失败(除了缺少 final }

您在运行代码时遇到的问题。您可能遇到此处描述的相同问题,并且可能在getClass().getResource(address2 + name + "." + type).

从类路径中读取资源很棘手,因为当您没有找到它们时不会得到异常,而是会得到null. 此外,在从类路径读取时,如果您使用类或类加载器作为路径更改,则必须小心。更多细节在这里

于 2013-06-08T18:25:52.140 回答