1

jar.からプロジェクトを実行すると、java.lang.Noclassdeffoundエラーが発生します。

例: 1 クラスには main メソッドが含まれています:

パッケージ p;

p1.MyClass1 をインポートします。

p2.MyClass2 をインポートします。

パブリック クラス TestClass {

public int i;
public Object obj;  //Line 5

public void aMethod(){

// オブジェクト obj=null; //7行目

    if(i==0){
        obj=new MyClass1();
        System.out.println("if block: p1.MyClass1");
    }else{
        obj=new MyClass2();
        System.out.println("else block: p2.MyClass2");
    }
}

public static void main(String [] args){
    TestClass t=new TestClass();
    t.aMethod();
}

}

2: p1 パッケージの MyClass1:

パッケージ p1;

パブリック クラス MyClass1 {

public MyClass1() {}

}

3- p2 パッケージの MyClass2:

パッケージ p2;

パブリック クラス MyClass2 {

public MyClass2() {}

}


上記の例では、3 つのクラスは TestClass、MyClass1、および MyClass2 です。ビルド後に上記のプロジェクトを実行すると(TestClassは私のプロジェクトのメインクラスです)、jarを使用してp2パッケージを手動で削除すると、正常に実行されます。ただし、TestClass を変更した後、グローバル変数 public Object obj にコメントを作成し (5 行目)、TestClass のメソッド aMethod でローカル変数 Object obj のコメントを削除します (7 行目)。次に、p2パッケージを手動で削除した後、jarからプロジェクトをビルドして実行すると、コンソールはスレッド「メイン」で例外を表示します java.lang.NoClassDefFoundError: p2/MyClass2

at run time no need of p2 package but making the variable "obj" in class TestClass

グローバルからローカルへ(メソッド内で aMethod()) 例外が発生します。 なぜこのエラーが発生するのか、私の問題を整理してください。

4

0 に答える 0