java.lang.ClassFormatError thrown when applet runs


Symptoms

When running an applet in a browser using the Sun JVM, a ClassFormatError is thrown by the ClassLoader. The same applet runs under the Microsoft  VM.

Cause

This error is caused by bytecodes generated from old JDK 1.0.2/1.1 compilers, or from a third-party obfuscator. In the past, many of these compilers and obfuscators generated bytecode that does not conform to the Java VM Specification. Because the verifiers in recent J2SE releases are much stricter about bad class format, the ClassFormatError is thrown by the VM when these bad class files are loaded.

Some typical problems in some older class files are the following (note that this list is not exhaustive):

Resolution

To allow some of the applets with bad class files to run in the Java 2 platform, Java Plug-in contains a bytecode transformer to transform some of the bad class files to good ones. Currently, only bad class files with the following problems may be transformed:

Unfortunately, the bytecode transformer cannot transform the following problems, which will still result in a ClassFormatError:

You can resolve these problems by simply recompiling your Java classes with the javac compiler from the JDK. If you choose to use a third-party obfuscator, be sure to use one that produces class files that respect proper class-file format.

Related Information

        N/A