Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to correctly get image from 'Resources' folder in NetBeans

I have a Java Project in NetBeans 7.0.

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.

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

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).

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

like image 364
ShockwaveNN Avatar asked Jul 27 '11 13:07

ShockwaveNN


People also ask

How do I import an image into Netbeans?

In the icon property dialog box, click Import to Project. In the file chooser navigate to any image that is on your system that you want to use. Then click Next. In the Select target folder page of the wizard, select the newpackage folder and click Finish.

How do I retrieve files from resources folder?

In Java, we can use getResourceAsStream or getResource to read a file or multiple files from a resources folder or root of the classpath. The getResourceAsStream method returns an InputStream . // the stream holding the file content InputStream is = getClass(). getClassLoader().

How do I view the resources folder in a jar file?

This works when running inside and outside of a Jar file. PathMatchingResourcePatternResolver r = new PathMatchingResourcePatternResolver(); Resource[] resources = r. getResources("/myfolder/*"); Then you can access the data using getInputStream and the filename from getFilename .

How do I create a resource folder in Netbeans?

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.


2 Answers

This was a pain, using netBeans IDE 7.2.

  1. You need to remember that Netbeans cleans up the Build folder whenever you rebuild, so
  2. Add a resource folder to the src folder:

    • (project)
      • src
        • project package folder (contains .java files)
        • resources (whatever name you want)
        • images (optional subfolders)
  3. After the clean/build this structure is propogated into the Build folder:

    • (project)
      • build
        • classes
          • project package folder (contains generated .class files)
          • resources (your resources)
          • images (your optional subfolders)

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.

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

like image 99
Jamie Avatar answered Oct 05 '22 02:10

Jamie


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

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.

enter image description here

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:

MyClass.class.getResource("/Images/main.jpg"); 
like image 34
Matthew Pautzke Avatar answered Oct 05 '22 01:10

Matthew Pautzke