Loading resources from a library class?

So I’m starting back into Java and it’s been awhile since I’ve done asset management on something not android. I’ve done some google-fu and haven’t quite found an answer to my problem.

I’m writing a modular game library. My graphics section is in a lib project called core. My main game is in it’s own project. I want to be able to send a url for an img in my game project folder to the image class in my core.

Here’s my setup:

So the last time I had to load an image in pure java was when swing was still considered new. There are noticeably more functions to load something than I know what to do with, and none of them seem to work atm.

My current code:

	public void loadSpriteFromLocation(String relativeLocation)
			throws IOException
	{
		try 
		{
		    //URL url = new URL(getCodeBase(), relativeLocation);
			URL url = ClassLoader.getSystemResource(relativeLocation);
			System.out.println(url.toString());
			
		    sprite = ImageIO.read(url);
		    
		    System.out.println("Image successfully loaded");
		} 
		catch (IOException e) 
		{
			throw e;
		}
	}

url = null. (the commented out function won’t even compile). http://docs.oracle.com/javase/tutorial/uiswing/components/icon.html#getresource is pretty good at showing resource locations but it doesn’t help me if I’m trying to load from a separate module from where the image is located.

Ideally, I want to be able to load from an executable jar file, but I also want something that’s easy to work with or perhaps a method where I could test the jar first then go locally if need be. (even more ideally, I’d love to write a resource manager that works like the android resources (if that’s really even possible), but I need to start somewhere first)

What am I missing here? Do I need to write a resource builder for this? (because I’m probably going to run into the same problem for the sound)

Any help is appreciated!

Haha, I think I got this working:

InputStream stream = this.getClass().getClassLoader().
                    getResourceAsStream(relativeLocation);
			sprite = ImageIO.read(stream);

Though I haven’t tried working with executable jars yet.

I use the slightly different (to load texts in my case):

    InputStream in = Utils.class.getResourceAsStream(textPath);

Your ‘img’ folder is not on the classpath. To add it, right click the folder, open Build Path submenu, and click on “Use as source folder”. After this, the contents are now top-level files, so you can call getResourceAsStream("/daisy.gif");

Is it me or has this question been asked and answered 2 times already in the last 30 days? And why is this in the Java2D subforum? :V