アプレットを実行すると java.lang.ClassFormatError がスローされる


症状

アプレットを Sun JVM を使用したブラウザで実行している場合、ClassFormatErrorClassLoader でスローされます。同じアプレットが Microsoft VM では実行できます。

原因

このエラーは、古い JDK 1.0.2 か 1.1 コンパイラ、またはサードパーティのオブファスケータによって生成されたバイトコードが原因で発生します。これまで、該当するコンパイラやオブファスケータによって多くのバイトコードが生成されていますが、いずれも Java VM 仕様に準拠していません。最近の J2SE リリースのべリファイアは不正なクラスフォーマットに関して非常に厳しくなっているため、こうした不正なクラスファイルがロードされたら VM によって ClassFormatError がスローされます。

古いクラスファイルに関する典型的な問題点は以下のとおりです (ただしすべてを網羅したものではない)。

解決方法

不正なクラスファイルをもついくつかのアプレットを Java 2 プラットフォームで実行できるようにするために、Java Plug-in には、不正なクラスファイルを正しいものに変換するバイトコード変換プログラムが含まれています。現時点では、以下の問題を持つ不正なクラスファイルだけが変換されます。

しかし、バイトコード変換プログラムでは、以下の問題を変換できません。そのため、依然として ClassFormatError が発生します。

これらの問題は、JDK にある javac コンパイラを使用して Java クラスを再コンパイルするだけで解決します。サードパーティのオブファスケータを使用する場合は、それが正しいクラスファイル形式に準拠したクラスファイルを作成するかどうかを確認してください。

詳細情報

なし