Sign in to follow this  
Patriarch K

How to make a proper Jar-file

Recommended Posts

Patriarch K    212
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.

Share this post


Link to post
Share on other sites
LorenzoGatti    4450
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.

Share this post


Link to post
Share on other sites
Patriarch K    212
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 :) Edited by Patriarch K

Share this post


Link to post
Share on other sites
Patriarch K    212
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.

Share this post


Link to post
Share on other sites
metsfan    679
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.

Share this post


Link to post
Share on other sites
Patriarch K    212
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 :(

Share this post


Link to post
Share on other sites
LorenzoGatti    4450
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 [i]x[/i] and [i]Nallenspiel[/i], matching the expected structure.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this