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()) 例外が発生します。 なぜこのエラーが発生するのか、私の問題を整理してください。