モジュール jdk.jdi
パッケージ com.sun.jdi

クラスClassNotLoadedException

java.lang.Object
java.lang.Throwable
java.lang.Exception
com.sun.jdi.ClassNotLoadedException
すべての実装されたインタフェース:
Serializable

public class ClassNotLoadedException
extends Exception
要求されたクラスが適切なクラス・ローダーによってロードされていないことを示すためにスローされます。

多数のVMにより実行される遅延クラス・リンクのため、関連しているクラスがロードされる前にフィールドまたは変数がプログラム内で認識可能な状態になる可能性があります。 クラスがロードされるまでの間に利用可能なのは、シグニチャ文字列だけです。 このようなフィールドまたは変数にJDIから値を設定しようとすると、目的のクラスがロードされていないために、適切な型チェックを行うことができません。 配列要素の要素クラスについても同じことが言えます。

この場合、すぐにクラスをロードして問題を解決しようとすることはお勧めできません。 イベントの通常の過程に従ってロードされるのを待たずにデバッガでクラスをロードすることには、2つの問題があります。

  • 適切なクラス・ローダーが実行されてクラスのローディングにデッドロックが発生しないことが保証されません。 クラス・ローダーは任意のJava™プログラミング言語コードで構成でき、クラス・ローディング・メソッドは通常同期されます。 デバッガが行う作業のほとんどは、スレッドが中断しているときに発生します。 同一のクラス・ローダー内で別のアプリケーション・スレッドが中断している場合、デッドロックが発生する可能性が高くなります。
  • クラスの通常のロード順序を変更することにより、アプリケーション内のバグが見えたり隠れたりします。 侵入的でないデバッガでは、デバッグされるアプリケーションの動作を変えないように努めなければいけません。
これらの問題を避けるために、この例外がスローされます。

この例外は、該当のクラスが囲むクラスのクラス・ローダーから認識可能になるまでスローされます。 つまり、囲むクラスのクラス・ローダーは、該当クラスの起動クラス・ローダーになります。 詳細は、Java™仮想マシン仕様を参照してください。

導入されたバージョン:
1.3
関連項目:
直列化された形式