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

时间:2023-01-24 16:35:02

I have a Java Project in NetBeans 7.0.

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

I want to add some image to some label dynamically. The image will differ depending on the state of the program.

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

I put one such image, 'filling.jpg', in the 'resources' folder of my project.

我把一个这样的图像'filling.jpg'放在我项目的'resources'文件夹中。

I want to reach this file correctly (not by absolute or relative path, because that will cause problems when I build the jar file).

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

So I found this method:

所以我找到了这个方法:

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

It keeps give me java.lang.NullPointerException. But I am sure that there is that image, because I can assign the image to the label from the NetBeans Properties menu for that label (but I don't want this, I want to add the image by Java code).

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

What am I doing wrong, and how can I get that image correctly?

我做错了什么,我怎样才能正确地获得该图像?

4 个解决方案

#1


43  

This was a pain, using netBeans IDE 7.2.

使用netBeans IDE 7.2时,这很痛苦。

  1. You need to remember that Netbeans cleans up the Build folder whenever you rebuild, so
  2. 你需要记住,Netbeans会在你重建时清理Build文件夹,所以

  3. Add a resource folder to the src folder:

    将资源文件夹添加到src文件夹:

    • (project)
      • src
        • project package folder (contains .java files)
        • 项目包文件夹(包含.java文件)

        • resources (whatever name you want)
        • 资源(无论你想要什么名字)

        • images (optional subfolders)
        • 图像(可选子文件夹)

      • src项目包文件夹(包含.java文件)资源(无论你想要什么名称)图像(可选子文件夹)

    • (项目)src项目包文件夹(包含.java文件)资源(无论你想要什么名称)图像(可选子文件夹)

  4. After the clean/build this structure is propogated into the Build folder:

    在clean / build之后,这个结构被传播到Build文件夹中:

    • (project)
      • build
        • classes
          • project package folder (contains generated .class files)
          • 项目包文件夹(包含生成的.class文件)

          • resources (your resources)
          • 资源(您的资源)

          • images (your optional subfolders)
          • 图像(您的可选子文件夹)

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

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

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

To access the resources:

要访问资源:

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

and:

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

worked for me. Note that in one case there is a leading "/" and in the other there isn't. So the root of the path to the resources is the "classes" folder within the build folder.

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

Double click on the executable jar file in the dist folder. The path to the resources still works.

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

#2


20  

Thanks, Valter Henrique, with your tip i managed to realise, that i simply entered incorrect path to this image. In one of my tries i use

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

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

But correct way was use name of my project in path to resource

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

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

#3


19  

I have a slightly different approach that might be useful/more beneficial to some.

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

Under your main project folder, create a resource folder. Your folder structure should look something like this.

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

  • Project Folder
    • build
    • dist
    • lib
    • nbproject
    • resources
    • src
  • 项目文件夹构建dist lib nbproject资源src

Go to the properties of your project. You can do this by right clicking on your project in the Projects tab window and selecting Properties in the drop down menu.

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

Under categories on the left side, select Sources.

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

In Source Package Folders on the right side, add your resource folder using the Add Folder button. Once you click OK, you should see a Resources folder under your project.

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

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

You should now be able to pull resources using this line or similar approach:

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

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

If you were to create a package called Images under the resources folder, you can retrieve the resource like this:

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

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

#4


0  

For me it worked like I had images in icons folder under src and I wrote below code.

对我而言,它的工作方式就像我在src下的icons文件夹中有图像,我在下面写了代码。

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

#1


43  

This was a pain, using netBeans IDE 7.2.

使用netBeans IDE 7.2时,这很痛苦。

  1. You need to remember that Netbeans cleans up the Build folder whenever you rebuild, so
  2. 你需要记住,Netbeans会在你重建时清理Build文件夹,所以

  3. Add a resource folder to the src folder:

    将资源文件夹添加到src文件夹:

    • (project)
      • src
        • project package folder (contains .java files)
        • 项目包文件夹(包含.java文件)

        • resources (whatever name you want)
        • 资源(无论你想要什么名字)

        • images (optional subfolders)
        • 图像(可选子文件夹)

      • src项目包文件夹(包含.java文件)资源(无论你想要什么名称)图像(可选子文件夹)

    • (项目)src项目包文件夹(包含.java文件)资源(无论你想要什么名称)图像(可选子文件夹)

  4. After the clean/build this structure is propogated into the Build folder:

    在clean / build之后,这个结构被传播到Build文件夹中:

    • (project)
      • build
        • classes
          • project package folder (contains generated .class files)
          • 项目包文件夹(包含生成的.class文件)

          • resources (your resources)
          • 资源(您的资源)

          • images (your optional subfolders)
          • 图像(您的可选子文件夹)

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

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

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

To access the resources:

要访问资源:

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

and:

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

worked for me. Note that in one case there is a leading "/" and in the other there isn't. So the root of the path to the resources is the "classes" folder within the build folder.

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

Double click on the executable jar file in the dist folder. The path to the resources still works.

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

#2


20  

Thanks, Valter Henrique, with your tip i managed to realise, that i simply entered incorrect path to this image. In one of my tries i use

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

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

But correct way was use name of my project in path to resource

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

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

#3


19  

I have a slightly different approach that might be useful/more beneficial to some.

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

Under your main project folder, create a resource folder. Your folder structure should look something like this.

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

  • Project Folder
    • build
    • dist
    • lib
    • nbproject
    • resources
    • src
  • 项目文件夹构建dist lib nbproject资源src

Go to the properties of your project. You can do this by right clicking on your project in the Projects tab window and selecting Properties in the drop down menu.

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

Under categories on the left side, select Sources.

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

In Source Package Folders on the right side, add your resource folder using the Add Folder button. Once you click OK, you should see a Resources folder under your project.

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

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

You should now be able to pull resources using this line or similar approach:

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

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

If you were to create a package called Images under the resources folder, you can retrieve the resource like this:

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

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

#4


0  

For me it worked like I had images in icons folder under src and I wrote below code.

对我而言,它的工作方式就像我在src下的icons文件夹中有图像,我在下面写了代码。

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