8

I made a java application and bundled all classes in a jar file. When I run the project from eclipse, my application is running successfully. But when I try to run my .jar file, I am not getting the icons used by my application. In the code I get my icons from images directory present in project folder. How can I present these image files to the end user when using a jar?

I am loading the image like so:

 final public ImageIcon iReport=new ImageIcon("images/Report.png");

I have also tried

final public ImageIcon iquit=new ImageIcon(getClass().getResource("images/quit.png"));

and

final public ImageIcon iquit=new ImageIcon(getClass().getResource("/images/quit.png"));

But this results in an error:

Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
Leigh
  • 28,765
  • 10
  • 55
  • 103
sAaNu
  • 1,428
  • 7
  • 21
  • 46

4 Answers4

11

You need to get it from the classpath instead of from the local disk file system.

Assuming that images is actually a package and that this package is inside the same JAR as the current class, then do so:

final public ImageIcon iReport = 
    new ImageIcon(getClass().getResource("/images/Report.png"));
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • 1
    Then the path is plain wrong. Do you understand when you need to use the leading slash `/`? Do you understand how relative paths work? – BalusC Jun 16 '11 at 14:19
  • Ok thanks,I get it....but now I am getting different problem ,it all works fine using eclipse but doesnt work after making jar....actually jar file is not running. – sAaNu Jun 16 '11 at 17:44
  • Where exactly are you calling this line? In the class inside the JAR? Are you sure that the image is in a package called `images`? – BalusC Jun 16 '11 at 17:49
  • Yes images are in package images,and jar file also content it but my jar file is not executing ....how could it be? – sAaNu Jun 16 '11 at 17:56
2

The files in jar files are treated as "Resources". you need to access them as a classpath resource, regular File access methods does not work there.

Try this:

final public ImageIcon iReport = (new ImageIcon(getClass().getResource("images/Report.png")));
gotomanners
  • 7,808
  • 1
  • 24
  • 39
1

I know this was asked long ago, but it might help others with the same problem, like me. I was already using getClass().getResource("..."), but the resource didn't get exported with .jar file. I solved the problem by refreshing the 'Resources' folder, and its every subfolder.

Velja
  • 143
  • 1
  • 2
  • 8
  • I hope this [answer](http://stackoverflow.com/a/9278270/1057230) will definitely help you :-) More info can be found in this [answer](http://stackoverflow.com/a/9866659/1057230) – nIcE cOw Jul 14 '13 at 16:40
1

100% works

final public ImageIcon iReport = new ImageIcon(getClass().getResource("/Report.png"));

Don't forget about "/" at path for image.

ppeterka
  • 20,583
  • 6
  • 63
  • 78
SorcerOK
  • 169
  • 9