Java BufferedImage 抛出 NullPointerException

Java BufferedImage throwing NullPointerException

我正在 Java 制作一个 space 射击游戏,但是当我尝试加载图像资源时,出现空指针异常。除了图像,一切正常。我编码目录错误吗?我该如何解决?

这是我的代码:

BufferedReader highScoreReader;
BufferedWriter highScoreWriter;

try {
    playerImage = ImageIO.read(this.getClass().getResourceAsStream("src/res/player.png"));
    bulletImage = ImageIO.read(this.getClass().getResourceAsStream("src/res/bullet.png"));
    enemyImage = ImageIO.read(this.getClass().getResourceAsStream("src/res/enemy.png"));

    highScoreReader = new BufferedReader(new FileReader("/files/HIGH_SCORE.txt"));
    highScoreWriter = new BufferedWriter(new FileWriter("/files/HIGH_SCORE.txt"));
} catch (Exception e) {
    e.printStackTrace();
}

这是我的文件目录的屏幕截图:

我从来没有见过这样做的。

试试这个

try {
    playerImage = ImageIO.read(getClass().getClassLoader().getResourceAsStream("src/res/player.png"));
catch(IOException e) {
}

try {
    playerImage = ImageIO.read(new File("src/res/player.png"));
catch (IOException e) {
}

很可能,您需要将图像复制到项目的构建目录中。如果您希望将它们视为类路径资源(您似乎这样做),请确保它们位于 eclipse 中的源文件夹中(或者,如果您使用 maven 或类似工具,则位于 src/main/resources 文件夹中。重点是,它们当 运行.

时,需要将其复制到 .class 文件所在的位置

记住:class.getResourceAsStream(...) returns 来自 classpath 的东西而不是来自你的源路径。

Arnav Garg 发现了问题。

当您的代码显示如下内容时: file("src/res/player.png") 该文件不存在,即 file.exists() 会 return 假

找出 java 认为文件所在的位置。

尝试使用 file.getAbsolutePath() 并将其与您的目录结构进行比较。