loading a file inside a Java package

I'm trying to load an image, like this:
URL url = getClass().getResource("image.jpg");
File f = new File(url.getPath());

Open in new window


the image.jpg file is inside the package:

koza/utility/draw/image.jpg

package koza.utility.draw

I get this exception.
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

Open in new window


not sure what I'm doing wrong.
LVL 25
Kyle HamiltonData ScientistAsked:
Who is Participating?
 
CEHJConnect With a Mentor Commented:
http://daffodil.dyndns.biz/webtmp/dist.jar

Have a look at that. Source inside

Run

java -jar dist.jar

Unzip to see source inside
0
 
CEHJCommented:
Try
URL url = getClass().getResource("/koza/utility/draw/image.jpg");

Open in new window

0
 
Kyle HamiltonData ScientistAuthor Commented:
same error, both this:

URL url = getClass().getResource("/koza/utility/draw/image.jpg");

Open in new window


and this:

URL url = getClass().getResource("koza/utility/draw/image.jpg");

Open in new window

0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
CEHJCommented:
But what are you doing *after* the code i gave you? You don't want/need to create a File out of it btw
0
 
Kyle HamiltonData ScientistAuthor Commented:
I just want to display an image based on some result.

the only way I can get it to work is by either providing an absolute path to the image, which totally sucks, cause then I can't share my code. Or, provide the path in the args array, which is also clumsy. So I would really like some way of providing the image path that just works no matter what machine it's running on.

// URL url = getClass().getResource("grumpycat.jpg");
// File file = new File(url.getPath());

//File f = new File("/Volumes/Victoria/Rosemary/koza/utility/draw/grumpycat.jpg");

File grumpy = new File(args[0]);
BufferedImage img1 = ImageIO.read(grumpy);

File dancing = new File(args[1]);
BufferedImage img2 = ImageIO.read(dancing);

if(result){
	g2d.drawImage(img2, null, 0,0);
}else{
	g2d.drawImage(img1, null, 0,0);
}

Open in new window

0
 
Kyle HamiltonData ScientistAuthor Commented:
BTW, if I'm doing this in a completely retarded way, I will not take any offense if someone points that out, and helps me do it right.
0
 
CEHJCommented:
URL url = getClass().getResource("/koza/utility/draw/image.jpg");
BufferedImage img1 = ImageIO.read(url);

Open in new window

0
 
Kyle HamiltonData ScientistAuthor Commented:
:( still the same error
0
 
CEHJCommented:
That can only be because the image is not at that location
0
 
Kyle HamiltonData ScientistAuthor Commented:
but it is. for sure.

when I access it via args array, there is no prob.

?? :(
0
 
Kyle HamiltonData ScientistAuthor Commented:
does it matter how I run the code?

here's my script that runs from within a src dir (src/koza/utility/draw ):
cd bin
java koza.utility.draw.Play
cd ../

Open in new window

0
 
Kyle HamiltonData ScientistAuthor Commented:
Hi CEHJ,

your code works.

But when I try to change the package and corresponding directory structure to something else, it doesn't work anymore.

Say I want to have another project, something like:

koza/experiments/flyingCats/image.jpg

I put my image.jpg and Play.java in the flyingCats dir as per above ^^

In the Play.java file I change the package name to package koza.experiments.flyingCats and the URL to /koza/experiments/flyingCats/image.jpg

I can't get that to work. Even with the Play.java file you provided. What could I possibly be doing wrong?
0
 
CEHJCommented:
http://daffodil.dyndns.biz/webtmp/cats.jar

Of course, it must be said that it's better practice to place image files in a lower resources branch off the package tree
0
 
Kyle HamiltonData ScientistAuthor Commented:
Hi CEHJ,

thank you so much for sticking with me. I figured out what I did wrong. thinking about it, it was kinda stupid, but sometimes you just get so close to something, the obvious eludes you :)

I had my images in the src directory, not the bin directory where the classes end up. oh well. All is well now.

If I put an img directory above the source dir like you're suggesting, like this:

MyProject
   src
   bin
   img

then I can just reference my path like this: ../../img right? anyway, I'll try that.

Cheers,
Koza
0
 
Kyle HamiltonData ScientistAuthor Commented:
Thanks a million, as always :)
0
 
CEHJCommented:
:)

Yes, then you'd address the image as "/img/image.jpg"
0
 
Kyle HamiltonData ScientistAuthor Commented:
ok, so now to further procrastinate from the project that I'm actually supposed to be making, I'd like to know if I can preserve the gif animation in my icon.

I'll ask a new question about that.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.