【问题标题】:Load Image outside src-Folder: NullPointerException在 src 文件夹外加载图像:NullPointerException
【发布时间】:2019-02-13 09:11:51
【问题描述】:

我尝试了不同的变体来在 JavaFX 中加载图像。

两个变体工作。 此处示例:

同一包中的图片 als Main:

    new Image(getClass().getResourceAsStream("gesicht.png");

图像在 img-Package 但在 src 文件夹内:

    Image img = new 
    Image(getClass().getResource("../img/gesicht.PNG").toExternalForm());

最后一个变体不起作用,我不明白为什么。有人可以解释一下吗?

img-Folder 中的图像,在 src 文件夹之外

      Image img = new Image(ClassLoader.getSystemResource("../../img/gesicht.png").toExternalForm());

我什么都试过了。但是只要图像在 src 文件夹之外,我总是会收到 NullPointerException 或失败的 URL

文件夹结构:

项目

  • src

    • 申请
      • Main.java
  • 图片

    • gesicht.png

Project-Structure with all variants

【问题讨论】:

  • 你试过右键图片复制相对路径
  • 在运行应用程序时,您需要确保 img 目录包含在类路径中。看起来所说的目录应该是资源目录,请确保它在您的 IDE 中被标记为这样。
  • 它在你的屏幕截图中显示gesicht.png,而不是Unbekannt.PNGicon.png;此外,“向上”导航不适用于资源路径;改用从类路径的根开始的完整路径:new Image(getClass().getResource("/img/gesicht.png").toExternalForm())
  • 请阅读 class.getResource 的 api 文档 - 它准确地解释了路径必须如何构建...

标签: javafx


【解决方案1】:

您需要确保img 文件夹是资源文件夹。 然后:

Image img = new Image(getClass().getResource("/img/gesicht.png").toExternalForm());

我认为相对路径从根目录开始,而不是从源文件所在的位置开始。

【讨论】:

  • 啊好吧!谢谢你的注意。我会相应地编辑我的答案
  • 感谢您的来信。但它不起作用。我在资源文件夹中的 im 文件夹。 getClass 给出主类。 getResource 搜索与给定类关联的资源由该类的定义类加载器实现。所以它关闭是/../../img/gesicht.png。但它不起作用。
【解决方案2】:

我有办法:

  1. 将 img 文件夹添加为资源文件夹
  2. getResource() 不起作用!但是:

图像 img = new Image("file:img/gesicht.png"); primaryStage.getIcons().add(img);

替代方案: Image image = new Image(new File("img/gesicht.png").toURI().toString());

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 2021-04-21
    • 2015-08-21
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2017-07-31
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多