Desktop Java application and image folders
I am developing a small desktop application using Java(ofcourse…).
Its a very long time that i had my hands on Swing.
First thing was to choose an IDE that will make the job more easier and this time i wanted to try
different IDE(i use Eclipse at work and at home too…), so i ended up with NetBeans.
NetBeans for Java desktop applications is like VisualBasic to Windows applications.
Everything was fine until i wanted to add an image to the title bar of a window(JFrame) .
Since this is a desktop java application, i thought to have the images folder inside the jar file.
Issues i faced
i created a folder with name images and put some images inside it.
Since Netbeans gives an ant build file to build and create a jar file , i had to edit the build.xml file to add the image folder inside myapp.jar file.
i tried my best to do it , but i couldn.
Solution
after creating the image folder , right-click on the project , select properties, click Add Folder and select the images folder.
Now Netbeans rewrites the build.xml file to add the images from the image folder to the jar.
so i edited the build.xml file ,so that the images are under a folder inside the jar.
before editing the build.xml the task was
<target name="-do-compile" depends="init,deps-jar,-pre-pre-compile,-pre-compile" if="have.sources">
<j2seproject3:javac/>
<copy todir="${build.classes.dir}">
<fileset dir="${src.images.dir}" excludes="${build.classes.excludes}"/>
<fileset dir="${src.dir}" excludes="${build.classes.excludes}"/>
</copy>
</target>
after editing the build.xml
<target name="-do-compile" depends="init,deps-jar,-pre-pre-compile,-pre-compile" if="have.sources">
<j2seproject3:javac/>
<copy todir="${build.classes.dir}">
<fileset dir="${src.dir}" excludes="${build.classes.excludes}"/>
</copy>
<copy todir="${build.classes.dir}/images">
<fileset dir="${src.images.dir}" excludes="${build.classes.excludes}"/>
</copy>
</target>
to load the image file to the title bar of the JFrame
public Image getIconImage() {
ClassLoader cldr = this.getClass().getClassLoader();
java.net.URL imageURL = cldr.getResource("images/login.gif");
return new ImageIcon(imageURL).getImage();
}
setIconImage(getIconImage());
So thats the solution i found to refer to an image file inside images folder packed inside a jar file.
Sounds Good…It’s good to experience Java Swing too
I’m using Eclipse 3.3 (europa)
In order to get image loading directly from the IDE, and from inside a jar, I had to do this:
BufferedImage myImage = null;
String imagePath = "some/directory/image.png";
try {
if (this.getClass().getResource("/" + imagePath) != null) {
InputStream imageStream = this.getClass().getResourceAsStream("/" + imagePath);
myImage = ImageIO.read(imageStream);
} else {
myImage = ImageIO.read(new File(imagePath));
}
} catch (IOException e) {
}