为 JavaFX ImageView 加载图像时的 Java getResourceAsStream NullpointerException

Java getResourceAsStream NullpointerException when loading image for JavaFX ImageView

提问人:Jenny 提问时间:12/30/2021 更新时间:12/30/2021 访问量:67

问:

我有以下项目设置(Maven Project):

项目设置

而绝对路径: C:\Users\jenny\IdeaProjects\gameapp\client\src\main\resources\images\game\black_market.png

此代码引发 Nullpointerexception:

    private void setUpImage(ImageView image){
    Platform.runLater(()->{
        var url = getClass().getResourceAsStream("images/game/black_market.png");
        System.out.println(url.toString());
        Image img = new Image(url);
        image.setImage(img);
    });
}

这可能是因为文件路径不正确,但我真的不知道如何自己修复它。在过去的 2-3 个小时里,我尝试在 Stackoverflow 上研究类似的问题。

在此函数上传递的 ImageView 是对 ImageView 的引用。我的函数应该加载图像并将其放入传递的 ImageView 中。老实说,我实际上不知道这是否有效,因为 Java 是按值传递的。

java javafx nullpointerexception 按引用 按值传递

评论

3赞 MadProgrammer 12/30/2021
请尝试改用。相对路径将在当前包中查找资源,而 using 将查看类路径的顶部。此外,解压缩生成的 JAR 文件并检查图像是否包含在 JAR 文件中var url = getClass().getResourceAsStream("/images/game/black_market.png");/
0赞 Jenny 12/30/2021
嘿,感谢您的快速回复。我已经试过了,但仍然得到:线程“JavaFX 应用程序线程”中的异常 java.lang.IllegalArgumentException:无效的 URL:找不到无效的 URL 或资源。图像包含在已编译的类/JAR 中。

答:

0赞 Jenny 12/30/2021 #1

为什么 setImage() 不会在 JavaFx 中更改我的 ImgView?

这个问题解决了它。我注意到缺少@FXML注释。添加它们解决了整个问题。

@FXML
private void setUpImage(ImageView image){
    Platform.runLater(()->{
        Image img = new Image("/images/game/black_market.png");
        image.setImage(img);
    });
}

评论

1赞 Slaw 12/31/2021
请问你为什么在通话中包装了这个代码?Platform.runLater
0赞 Jenny 1/1/2022
@Slaw 你说得完全正确,代码是多余的,因为我在 GUI 线程/控制器类中。