You can just bundle the images inside the .jar file and retrieve them as classpath resources. There are several ways to go about this, and which one fits your situation best is up to you. You can include all the image files directly at the root of the .jar file or in a specific resource subfolder, or you can place them directly next to .class file in a specific package. The location inside the .jar file and the means by which you can retrieve the images in your application are linked, though.
For instance, say you have a class
MoosePrinter in a package
com.javaranch, which displays
moose.gif - an image of the JavaRanch mascot. Inside your .jar file you'd have a folder/subfolder
nl/javaranch, which contains two files
MoosePrinter.class and
moose.gif. In the code of
MoosePrinter you can retrieve the
moose.gif image as a classpath resource by calling
Class.getResourceAsStream("moose.gif"). This approach would only work from inside the MoosePrinter class or any other class in the
com.javaranch package, though. Let's say you'd placed the
moose.gif image in the root of the .jar file - the previous approach from retrieving the image from inside the
MoosePrinter class wouldn't work. You would have to use
ClassLoader.getResourceAsStream("moose.gif"); instead. Notice this is a method of
ClassLoader, whereas the previous approach used a method of
Class.
So, there are several ways to bundle the images and several ways to get at them from inside the application, depending on where you bundled them. Which approach you pick is up to you, but it's good to be aware of the methods that allow you to load resources on the classpath, the most commonly used are:
ClassLoader.getResourceAsStream()
ClassLoader.getResource()
Class.getResourceAsStream()
Class.getResource()
Note that these all behave differently and have different return values, so read the API documentation carefully!