Java 如何从';资源';NetBeans中的文件夹

Java 如何从';资源';NetBeans中的文件夹,java,netbeans,resources,Java,Netbeans,Resources,我在NetBeans 7.0中有一个Java项目 我想在标签上动态添加一些图像。根据程序的状态,图像会有所不同 我把这样一张图片“filling.jpg”放在我项目的“resources”文件夹中 我希望正确地访问该文件(不是通过绝对或相对路径,因为在构建jar文件时,这会导致问题) 所以我找到了这个方法: ImageIcon fillingIcon = new ImageIcon(getClass().getClassLoader().getResource("filling.jpg"));

我在NetBeans 7.0中有一个Java项目

我想在标签上动态添加一些图像。根据程序的状态,图像会有所不同

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

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

所以我找到了这个方法:

ImageIcon fillingIcon = new ImageIcon(getClass().getClassLoader().getResource("filling.jpg"));
labelFontFilling.setIcon(fillingIcon);
它总是给我java.lang.NullPointerException。 但我确信确实存在该映像,因为我可以从该标签的NetBeans属性菜单中将该映像分配给该标签(但我不希望这样,我希望通过Java代码添加该映像)


我做错了什么?我如何才能正确地获得该图像?

谢谢,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));

使用netBeans IDE 7.2是一种痛苦

  • 您需要记住,无论何时重建,Netbeans都会清理构建文件夹,因此
  • 将资源文件夹添加到src文件夹:

    • (项目)
      • src
        • 项目包文件夹(包含.java文件)
        • 资源(任意名称)
        • 图像(可选子文件夹)
  • 清理/生成后,此结构将分发到生成文件夹:

    • (项目)
      • 构建
        • 课程
          • 项目包文件夹(包含生成的.class文件)
          • 资源(您的资源)
          • 图像(可选子文件夹)
  • 要访问资源,请执行以下操作:

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

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


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

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

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

    • 项目文件夹
      • 建造
      • 距离
      • 解放党
      • NB项目
      • 资源
      • src
    转到项目的属性。可以通过在“项目”选项卡窗口中右键单击项目并在下拉菜单中选择“属性”来执行此操作

    在左侧的“类别”下,选择“源”

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

    现在,您应该能够使用以下方法获取资源:

    MyClass.class.getResource("/main.jpg");
    
    如果要在resources文件夹下创建名为Images的包,可以按如下方式检索资源:

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

    对我来说,它就像我在
    src
    下的
    icons
    文件夹中有图像一样工作,我在下面写代码


    newImageIcon(getClass().getResource(“/icons/rsz_measurement_01.png”)

    您可以打印给定的路径吗?与System.out.println(getClass().getClassLoader().getResource(“filling.jpg”))类似,这可以为您提供尝试使用的路径的线索。它返回“null”,因此这是一个验证问题。但我不明白为什么它的返回值为空,在您的项目中创建的resources文件夹在哪里?它在classpath中吗?它在src/NameofProject/resources中的resources文件夹中。默认情况下,它是由NetBeans创建的。我不知道如何将它添加到project中,我查看project->Properties->Libraries,但我找不到可以添加它的地方。这里有一个很好的建议:我使用了这种方法,但我发现了一种令人不安的效果。构建完成后,netbeans将加载jar中的所有资源,我真的希望这些资源不在jar中!那么这个问题有解决方法吗?不幸的是,java资源方法可能不是您想要的。但是,如果您的文件位于类路径中,则可以使用ClassLoader.getSystemResource(“somefile.txt”)……您也不再希望包含上述resources文件夹。另一种选择是在jar的父目录(或静态路径)中查找给定的文件(资源),并使用file或其他等效文件打开它们以满足您的需要。如果文件不存在,则从存储在jar中的资源创建它。在这种情况下,它们更像是模板。这对我来说有点不清楚。“图像”文件夹应该在“资源”文件夹内还是在其旁边!
    MyClass.class.getResource("/Images/main.jpg");