tags:

views:

265

answers:

5

How do you debug getResource-style methods that are failing, returning null?

I am sure the file it's looking for is there, but it's returning NULL. How do I know what it is looking for to try to spot any mismatch?

+2  A: 

You could use the Eclipse-debug-mode and set a breakpoint on the method that fails. From there you can go step by step down in the call tree until you see what fails.

Most common is that the file isn't there beacause it wasn't copied there or isn't in the classpath etc...

boutta
ACK, that's what I've run into also.
dhiller
yes that's the most common, it happened to several times while passing from IDE to an ant script to compile...
Vinze
+1  A: 

The getResource call is looking for a file relative to the class file.

My first guess would be that when you have compiled you have forgotten to put the resource files into the compile folder. That's what I've been running on often.

dhiller
A: 

I've usually experience this whenever the ClassLoader changes.

Depending on the exact context that an app is running ClassLoaders have different rules about when a resource file exists. For example in netbeans getResource is case insensitive, but in Sun's JRE it is.

Although not directly answering your question, I thought you should know this (if you didn't already).

Allain Lalonde
+1  A: 

Since getResource() searches the classpath (as others have mentioned), it might be helpful to dump the actual classpath being searched before your problemsome getResource() call:

log.debug("classpath is: " + System.getProperty("java.class.path"));

//the line that is returning null
... = Thread.currentThread.getContextClassLoader.getResource("blah");

What is probably happening is that the files/directories you think are on the classpath are actually not (perhaps an invalid path is being set somewhere along the way).

matt b
A: 

I think you should tell Eclipse or your favourite IDE where the JDK (JRE) source files can be found. Then you can step in the methods of the Java Runtime classes too.

Szundi