I am not exactly a Java expert but a while ago I researched the firmware of a car navigation system. For the java bits of it I used the “Java Decompiler project” and it seemed to work well for decompilation.
The “Java Decompiler project” aims to develop tools in order to
decompile and analyze Java 5 “byte code” and the later versions.
JD-Core is a library that reconstructs Java source code from one or
more “.class” files. JD-Core may be used to recover lost source code
and explore the source of Java runtime libraries. New features of Java
5, such as annotations, generics or type “enum”, are supported. JD-GUI
and JD-Eclipse include JD-Core library.
JD-GUI is a standalone graphical utility that displays Java source
codes of “.class” files. You can browse the reconstructed source code
with the JD-GUI for instant access to methods and fields.
JD-Eclipse is a plug-in for the Eclipse platform. It allows you to
display all the Java sources during your debugging process, even if
you do not have them all.
JD-Core works with most current compilers including the following:
jdk1.1.8
jdk1.3.1
jdk1.4.2
jdk1.5.0
jdk1.6.0
jdk1.7.0
jikes-1.22
harmony-jdk-r533500
Eclipse Java Compiler v_677_R32x, 3.2.1 release
jrockit90_150_06