How to make a proper Jar-file

Started by
8 comments, last by LorenzoGatti 11 years, 5 months ago
I've been fiddeling with this for a while now but I can't really make a good Jar-file.I have a folder called img where I have all the pictures and sound and music. When I make my jar-file I need to make a Jar-file for the code and when it's finished I need to put my folder with all the images and stuff in the same place where I have my jar.
I want to put EVERYTHING in my jar-file so I don't need to have a sub-folder every time I export my game to jar.
I know that there is something wrong with the pathway of the images but I don't know how to fix it.

Here's how it looks for me at the moment:

ImageIcon keyIcon = new ImageIcon("img\\Key.gif");
Image key = keyIcon.getImage();

I use eclipse.
Advertisement
Making a proper Jar archive is trivial, but you need to change your code.
After you place your images folder in the jar file along with your classes, you should load images from the classpath rather than from the file system, with methods like ClassLoader.getResourceAsStream(), the most commonly used, or ClassLoader.getResource(), which might be convenient for images because it returns an URL.

Omae Wa Mou Shindeiru

Hmm, could you give some kind of example? I tried to do this:

ImageIcon menuIcon = new ImageIcon(ClassLoader.getResource("Nallespel/img/menuu.png"));
Image menu = menuIcon.getImage();

But I don't know, It doesn't really do it. That is my path however. It wants to have a string and I know that I can't put the path name like I did, but I don't really get it...hmm. I'm confused :)
Check out http://www.javaworld.com/javaqa/2003-08/01-qa-0808-property.html
for examples of loading files from jars. It can be confusing.

I think, therefore I am. I think? - "George Carlin"
My Website: Indie Game Programming

My Twitter: https://twitter.com/indieprogram

My Book: http://amzn.com/1305076532

Hmm, it's pretty confusing at the moment, but I will try out your advice! Thanks!
I can't get it to work. I always get nullpointerexception all the time

ImageIcon menuIcon = new ImageIcon(Game.class.getClassLoader().getResource("Nallespel/img/menuu.png"));
Image menu = menuIcon.getImage();

The folder is located there and everything is refreshed and it should really work. (Game.class is the same as this.getclass()). What to do?! I've tried everything, with // and / and nothing and \\ but nothing works. It just can't find the image.
Not sure if you are using an IDE or not, but I have had great success creating jars (both runnable and non-runnable) using eclipse. I understand your issue is related to assets. Eclipse has an option which allows you to include all assets within the jar. This has always worked out well for me. Hope this helps, best of luck.
Do you have a "Nallespel" folder in the top level of your jar?

Omae Wa Mou Shindeiru

I use Eclipse and I've tried to integrate it somehow, but it doesn't even work when I try to compile so I don't bother trying to make a jar with everything included everytime. If it can find the pathway when I compile, then I'm making progress :)

Yes, I have the Nallespel folder as a top folder and in that folder I have the img and the src stuff. It feels like I've tried everything at this moment without success :(
If you use Eclipse, you can use File > Export > JAR File, but only after setting up your images folders as source folders. For example, if you have PatriarchProject/src as source folder for Java code (class x.y.z.Foo located at PatriarchProject/src/x/y/z/Foo.java), you should also add PatriarchProject/res as a source file and place your images in locations like PatriarchProject/res/Nallespel/img/menuu.png. Your jar will contain what's inside the source folders: subfolders x and Nallenspiel, matching the expected structure.

Omae Wa Mou Shindeiru

This topic is closed to new replies.

Advertisement