I'd suggest InstallJammer. It's not written in Java, but it's cross-platform and provides capabilities to handle Java-based applications during installation. Being that it's not based on Java, it doesn't actually require any version of the JRE to be installed on the target system, which is kind of nice, but you can still use actions within your installer to locate versions of the JRE for your application. The installers are small and completely self-contained.
It's also free and open source, if that matters to you. It does to some. :)