Users of your Java app must have the JRE installed in order to run it.
You can either tell them to install Java first, or distribute JRE with your app, as Processing does.
Note, however, that your packaged program will be heavy if you include JRE with it. And, if you want to do that, users will need to download the appropiate package for their platform.
Executable Java Wrappers
They take your Java app as input and wrap them in an executable (for a specified platform). You can customize them as you like;
and if the user doesn't have Java installed, the download page will open.
Some examples are Launch4J, JSmooth and Jar2EXE.
Installers
They are independent applications configured to copy your app files to the user's computer and (optionally) create a shortcut.
Some installers are written in Java, so they're multiplatform. In this case, the installer is a .jar
.
Some others are platform-dependent, but you have the advantage that you don't need to wrap them.
Java installers: IzPack, Packlet, PackJacket, Antigen, …
Java Web Start
It's a Java feature that allows you users to easily run your apps. You give them a .jnpl
file,
they open it, and Java downloads the latest version of your app and runs it. No packaging troubles!
See the complete list of resources here.