Java getResourceAsStream();始终为空(Netbeans)

Java getResourceAsStream();始终为空(Netbeans),java,netbeans,javafx,Java,Netbeans,Javafx,我花了将近2天的时间试图从我的netbeans项目内部加载文件,但它总是给出NullPointException 当前我的目录看起来像: JavaFXApplication: src --清单(包含Manifest.java) --图像(在清单包内,也称为Manifest.images) --server.jpg(内部图像包) 我试图从images包加载server.jpg,但它总是返回NULL 下面是我的代码片段: try { rect.setFill(new Image

我花了将近2天的时间试图从我的netbeans项目内部加载文件,但它总是给出NullPointException

当前我的目录看起来像:
JavaFXApplication:

  • src
    --清单(包含Manifest.java)
    --图像(在清单包内,也称为Manifest.images)
    --server.jpg(内部图像包)

我试图从images包加载server.jpg,但它总是返回NULL
下面是我的代码片段:

try {

        rect.setFill(new ImagePattern(new Image(Manifest.class.getResourceAsStream("images\\server.jpg"))));

    } catch (NullPointerException e) {

    System.out.println(Manifest.class.getResourceAsStream("server.jpg"));

    }
就在两天前,我在YouTube教程中看到了这段代码,但它不起作用。从这里尝试许多这样的解决方案,但对我来说没有任何效果。突然,它奏效了。第二天,尝试运行相同的代码,再次出现相同的空错误。


你们能帮帮我吗。我对JavaFX完全陌生。没有太多的经验。

使用
getClass().getClassLoader().getResourceAsStream(“”
)。当您执行
Manifest.class.getResourceAsStream(“images\\server.jpg”)
时,它将尝试加载与
Manifest.class
所在位置相关的文件。

除此之外,您几乎肯定需要正斜杠而不是反斜杠。请参阅如何构造资源名称。@Jon Skeet AFAIK,\\”用于基于windows的平台,这就是我使用双反斜杠的原因。@AkkiMahajan:但你不是要文件,而是要资源。根据上下文的不同,这可能会起作用,但是
/
更具可移植性,如果资源位于jar文件中,也会起作用,例如。@AkkiMahajan:您不应该将它们视为物理文件系统上的文件。它们是可以作为流加载的数据,但也可以通过其他方式使用——通过URL获取,从jar文件中加载,等等。在获取它们时不应该使用反斜杠。我已经尝试了很多方法,但都不起作用。在发布这个问题后,我尝试运行它,结果出乎意料地成功了。我在sceenshot中使用了2个getResourceAsStream,两者都不同,但仍然有效。是的,因为您已将清单添加到位置
Manifest.class.getResourceAsStream(“Manifest\\images\\server.jpg”)
,而该位置与您在上面发布的文件夹不同。此外,当我尝试清理项目并运行它时,它仍然不会加载图像。在验证build->classes->Manifest之后,没有图像文件夹。只有Manifest.class。因此,我必须手动复制src中的images文件夹以进行构建。为什么images文件夹不在清单(类)中?事实上,它是在没有任何原因的情况下工作的,但是如果您正确地看到它们,两个getResourceAsStream()代码是不同的。第一个不是没有getClassLoader(),另一个是有,相对路径对于两者都是相同的,但它们仍然工作。!!怎样??JavaFX bug?您是否可以尝试
getClass().getClassLoader().getResourceAsStream(“”)
而不将images文件夹复制到Manifect文件夹。但要确保它在classes文件夹下。