28

だから私は(リモートで)Eclipseでjava / jbossアプリケーションをデバッグし、行ごとにステップスルーしています。ある時点で、GridSquareオブジェクトの配列(GridSquareかなり単純なスタンドアロンクラスであり、いくつかのプロパティとメソッドが含まれています)は、メソッド呼び出しによって作成されます。

GridSquare[] squares = this.theGrid.getSquares(14, 18, 220, 222);

...実際にコードを実行すると、squares配列にGridSquareオブジェクトが入力されますが、コードをステップ実行してデバッグすると、奇妙なことが起こります。上記の割り当ての直後の行のブレークポイントでsquares、値の代わりに配列を表示しようとすると、次のようになります。

org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.

...誰もがそれが何であるか知っていますか?

4

6 に答える 6

27

基本的には、クラスローダーがGridSquare[]クラスをロードしていないことを意味します。そうは言っても、それはある意味でデバッガーのバグのように聞こえます。コードとのブレークポイントの関連付けが少し壊れているようです。行番号を同期させるために再コンパイルする必要があるか、他の問題が発生しています。コードのその時点で(割り当て後)、ロードする必要があります。getSquaresが実際にサブクラス(GridSquareSubclass [])を返さない限り、その時点で、JVMはサブクラスを(まだ)必要としないため、ロードしていない可能性があります。

于 2009-09-02T14:06:24.710 に答える
1

リフレクションを使用するコードで単体テストを実行していたため、このエラーが発生しました。コードのすべての機能をテストするための特別なクラスを作成しました。Junitは明らかにテストクラスに別のクラスローダーを使用しているため(これは完全に理にかなっています)、私のコードはそのクラスでリフレクションを使用できませんでした。取得したスタックトレースは非常に一般的(java.lang.InstantiationException)でしたが、デバッグモードでチェックすると、Exceptionオブジェクト自体の詳細がありました(org.eclipse.debug.core.DebugException:com.sun.jdi.ClassNotLoadedException)それが私をこの結論に導きました。

そこで、特別なクラスをメインのクラスローダーに移動し(ファイルをsrc / test/javaからsrc/main / javaに移動することにより)、正常に機能しました。私はこの解決策が好きではありませんが、代替案を見つけることができません。私の場合、それは大したことではありませんが、これが他の人にとってどのように懸念されるかはわかります。

于 2017-06-29T15:40:47.370 に答える
0

親クラスの変数を非表示にするサブクラスのクラス変数がある場合、これがEclipseで発生するのを見てきました。どういうわけかそれはEclipseを混乱させます(そして一般的にとにかく悪い考えです:)。例えば:

class A {
   private String a;
}

class B extends A {
   public String a;
}
于 2013-01-29T02:53:12.753 に答える
0
//Give a SIZE to the array:
GridSquare[] squares = GridSquare[this.theGrid.size()];

//Fill each element of the array with the object constructor to avoid the null value
for(int i=0; i<this.theGrid.size(); i++){
    squares[i] = new GridSquare();
    squares[i] = this.theGrid.getSquares(14, 18, 220, 222);
}
于 2015-09-30T13:58:45.173 に答える
-1

GridSquareを初期化することにより、問題を解決します。squares = new GridSquare();

于 2015-07-13T09:53:35.423 に答える
-3

私は同じ問題に直面しました。publicstaticvoidmainメソッドを作成し、同じタイプのオブジェクトを作成し、Javaアプリケーションとして実行し、次にmainメソッドを削除しましたが、正常に動作するようになりました。

于 2015-01-24T02:17:11.117 に答える