注: この Java 配備ガイドでは、Java SE 6 update 10 リリースより前にリリースされた機能について説明します。最新情報については、Java Rich Internet Application の開発および配備を参照してください。

java.lang.ClassFormatError がスローされるスロー元: ClassLoader

症状

Sun Java™ Runtime Environment (JRE™) を使ってブラウザ内でアプレットを実行すると、ClassLoader によって java.lang.ClassFormatError がスローされます。同じアプレットが Microsoft  Virtual Machine (VM) では実行できます。

原因

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

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

解決方法

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

しかし、バイトコード変換プログラムでは、次の問題を変換できません。そのため、引き続き ClassFormatError が発生します。

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

詳細情報

        なし。


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.