Unlike C/C++ compilers that produce binary executables, Java produces bytecode. Running bytecode can be difficult for regular users, particularly when the application requires external libraries.
There are several solutions to the problem; you can:
- Create an executable JAR.
- Create shell scripts.
- Create another executable that invokes the Java application.
The first option is easiest, however it works only in Windows. In addition, archiver programs can override the default JAR file association, in which case the surprised user gets presented with the archiver UI and the guts of the program instead of the expected application.
Fortunately, creating a shell script supplies a quick solution to the problem?and it works fine in Windows, Linux, and even OSX. Here’s a script example:
C> type [email protected] OFFSET BD=%~dp0SET CP=%BD%jdomjdom.jarSET CP=%CP%;%BD%swtswt.jarstart /B javaw -cp "%CP%" mypkg.MyApp-------------------------$ cat MyApp.sh#!/bin/shBD='dirname $0'CP=$BD/jdom/jdom.jarCP=$CP:$BD/swt/swt.jar...java -cp "$CP" mypkg.MyApp
To run the script in Windows, launch it with start to make the command prompt disappear.
Another—and possibly more elegant—way to avoid displaying the command prompt is to create an executable installer. Free tools such as NSIS are available for this purpose. Your installer then simply creates a menu icon that runs javaw directly. To avoid long classpath entries on the command prompt, you can include the classpath in a MANIFEST.MF file in the main JAR file.
For more information, see this NSIS tutorial.