如何从NetBeans中的“资源”文件夹正确获取图像

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

我想dynamic地添加一些图像到一些标签。 图像将根据程序的状态而有所不同。

我在我的项目的“资源”文件夹中放置了一个这样的图像“filling.jpg”。

我想正确地到达这个文件(不是通过绝对path或相对path,因为当我构buildjar文件时会导致问题)。

所以我find了这个方法:

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

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

我做错了什么,以及如何正确地获得该图像?

这是一个痛苦,使用netBeans IDE 7.2。

  1. 你需要记住,每当你重build,Netbeans清理生成文件夹,所以
  2. 将资源文件夹添加到src文件夹中:

    • (项目)
      • SRC
        • 项目包文件夹( 包含.java文件
        • 资源无论你想要什么名字
        • 图像( 可选子文件夹
  3. 在清理/构build之后,这个结构被传播到Build文件夹中:

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

要访问资源:

 dlabel = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("resourceshttp://img.dovov.comlogo.png"))); 

和:

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

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

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

谢谢, 瓦尔特·恩里克 ,你的提示,我设法意识到,我只是input这个图像的不正确的path。 在我使用的一个尝试中

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

但正确的方式是在资源path中使用我的项目名称

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

我有一个稍微不同的方法,可能是有用的/更有利于一些。

在您的主项目文件夹下,创build一个资源文件夹。 你的文件夹结构应该看起来像这样。

  • 项目文件夹
    • build立
    • DIST
    • LIB
    • nbproject文件
    • 资源
    • SRC

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

在左侧的类别下,select来源。

在右侧的源包文件夹中,使用“添加文件夹”button添加资源文件夹。 一旦你点击确定,你应该看到你的项目下的资源文件夹。

在这里输入图像描述

你现在应该能够使用这条线或类似的方法拉动资源:

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

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

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