【问题标题】:How to correctly get image from 'Resources' folder in NetBeans如何从 NetBeans 中的“资源”文件夹中正确获取图像
【发布时间】:2021-10-17 09:14:33
【问题描述】:

我在 NetBeans 7.0 中有一个 Java 项目。

我想动态添加一些图像到某个标签。图像会根据程序的状态而有所不同。

我在我的项目的“resources”文件夹中放了一张这样的图片“filling.jpg”。

我想正确地访问这个文件(不是通过绝对或相对路径,因为这会在我构建 jar 文件时导致问题)。

于是我找到了这个方法:

ImageIcon fillingIcon = new ImageIcon(getClass().getClassLoader().getResource("filling.jpg"));
labelFontFilling.setIcon(fillingIcon);

它不断给我 java.lang.NullPointerException。 但我确信有那个图像,因为我可以从 NetBeans 属性菜单中将图像分配给该标签的标签(但我不想要这个,我想通过 Java 代码添加图像)。

我做错了什么,如何正确获取该图像?

【问题讨论】:

  • 你能打印出给定的路径吗?像 System.out.println(getClass().getClassLoader().getResource("filling.jpg")) 一样,这可以为您提供尝试使用的路径的线索。
  • 它返回'null',所以这是Exeption的问题。但我不明白为什么它的返回为空
  • 您的项目中创建的资源文件夹在哪里?它在类路径中吗?
  • src/NameofProject/resources 中的资源文件夹。它是由 NetBeans 默认创建的。我不知道如何将它添加到项目中,我查看了 Project->Properties->Libraies,但我找不到可以添加它的地方。

标签: java netbeans resources


【解决方案1】:

谢谢,Valter Henrique,根据您的提示,我设法意识到,我只是输入了错误的图像路径。 在我的一次尝试中,我使用了

    String pathToImageSortBy = "resources/testDataIcons/filling.png";
    ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy));

但正确的方法是在资源路径中使用我的项目名称

String pathToImageSortBy = "nameOfProject/resources/testDataIcons/filling.png";
ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy));

【讨论】:

    【解决方案2】:

    这很痛苦,使用 netBeans IDE 7.2。

    1. 您需要记住,Netbeans 会在您重建时清理 Build 文件夹,所以
    2. 将资源文件夹添加到src文件夹:

      • (项目)
        • 源代码
          • 项目包文件夹(包含 .java 文件
          • 资源随便你的名字
          • 图像(可选子文件夹
    3. 在清理/构建之后,这个结构被传播到构建文件夹中:

      • (项目)
        • 构建

            • 项目包文件夹(包含生成的 .class 文件
            • 资源(您的资源
            • 图像(您的可选子文件夹

    要访问资源:

    dlabel = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("resources/images/logo.png")));
    

    和:

    if (common.readFile(getClass().getResourceAsStream("/resources/allwise.ini"), buf).equals("OK")) {
    

    为我工作。请注意,在一种情况下有一个前导“/”,而在另一种情况下则没有。 所以资源路径的根是构建文件夹中的“classes”文件夹。

    双击dist文件夹中的可执行jar文件。通往资源的路径仍然有效。

    【讨论】:

    • 这对我来说有点不清楚。图像文件夹应该在资源文件夹内,还是在它旁边!
    【解决方案3】:

    我有一个稍微不同的方法,可能对某些人有用/更有益。

    在您的主项目文件夹下,创建一个资源文件夹。您的文件夹结构应如下所示。

    • 项目文件夹
      • 构建
      • 分布
      • nbproject
      • 资源
      • 源代码

    转到项目的属性。您可以通过在“项目”选项卡窗口中右键单击您的项目并在下拉菜单中选择“属性”来执行此操作。

    在左侧的类别下,选择来源。

    在右侧的源包文件夹中,使用添加文件夹按钮添加您的资源文件夹。单击“确定”后,您应该会在项目下看到一个 Resources 文件夹。

    您现在应该能够使用此行或类似方法提取资源:

    MyClass.class.getResource("/main.jpg");
    

    如果您要在资源文件夹下创建一个名为 Images 的包,您可以像这样检索资源:

    MyClass.class.getResource("/Images/main.jpg");
    

    【讨论】:

    • 我使用了这种方法,但我发现了一个令人不安的效果。在构建 netbeans 加载 jar 内的所有资源之后,我真的希望资源远离 jar!那么这个问题有解决方法吗?
    • 不幸的是,java 资源方法可能不是您想要的。但是,如果您的文件位于类路径中,您可能可以使用 ClassLoader.getSystemResource("somefile.txt")...您也不再希望包含上述资源文件夹。另一种选择是在 jar 的父目录(或静态路径)中查找给定文件(资源)并使用 File 或其他等效项打开它们以满足您的需要。如果该文件不存在,则从 jar 中存储的资源创建它。在这种情况下,它们更像是模板。
    【解决方案4】:

    对我来说,它就像我在src 下的icons 文件夹中有图像,我写了下面的代码。

    new ImageIcon(getClass().getResource("/icons/rsz_measurment_01.png"));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-22
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 2015-01-12
      相关资源
      最近更新 更多