Java in a Windows EXE with launch4j By Maxflash

Launch4j is an all-Java program that will bind a configurable Windows stub executable file to a Java jar file. The result is a jar embedded in a specially configured EXE.
When invoked, the EXE will execute the system's appropriate JVM ( or will issue an error message if a compatible JVM hasn't been found ) and will then execute the embedded jar file in this JVM.
Effectively, launch4j bottles up Java code into a Windows EXE.
Since launch4j is an all-Java program, one can actually build Windows EXE's on various supported non-Windows platforms.
Let's take a trivial sample Java program and turn it into an EXE with launch4j.

// Display a simple message
// This code is in the public domain.

import javax.swing.*;

public class HeyGuys {
   public static void main(String[] args) {
      JOptionPane.showMessageDialog(null,"Hey, you guys!");
Enter the following to compile and execute the program:
javac java HeyGuys
The message:
should appear on the screen. Click OK.
Let's take the file HeyGuys.class and put it in its own jar file. We first need to create a manifest file so that the jar will contain metadata to indicate which class should be executed via java.exe or javaw.exe.
Enter the following two lines in a file called Manifest-Version: 1.0 Main-Class: HeyGuys
Then, issue the following command: jar -cfm heyguys.jar HeyGuys.class
Executing the above command should yield the file heyguys.jar.
Now, let's try to execute the jar to see if we've packaged it up correctly. java -jar heyguys.jar
You should see the same message window that was displayed earlier:
Finally, let's use launch4j to package up the jar into an EXE.
Although launch4j has a command-line interface, I first used the GUI.
The first screen I filled in looked similar to this:
I tried to just save the EXE at that point, but I then needed to specify a minimum Java version on this tab:
After changing those values, launch4j wanted me to save those options in an XML file, so I just chose the name l4j.xml arbitrarily.
Launch4j then quickly packaged a small EXE.
If you run it on a version of Windows with Java 1.6.0 or above, you'll see the message window. If you don't have a 1.6.x JVM, you'll be prompted to download one.
Note that launch4j is not an installer. Now that you have an EXE, you might want to build an installer around it with a product like Inno Setup or the NSIS installer system.
Also note that in addition to the bare options that I've chosen, a number of other options are available including the ability to set an icon and the ability to specify the JVM's runtime parameters such has heap size.
Comment @ by vipula dissanayake.

Post a Comment