1

ファイルシステムからjarファイルをロードするカスタムクラスローダーを作成しました。ロードと検索メソッドのcustomClassLoaderオーバーライドとその動作方法クラスローダーの定義後にすべてのコードを実行するメソッドのコンテキストでcustomClassLoaderと連携させるにはどうすればよいですか。メソッドでこのコードを実行するf1()と、このエラーが発生しますjava.lang.NoClassDefFoundError org.xml.dd.myclass

メソッドのコンテキストで、customClassLoaderを使用して常に実行することを定義するにはどうすればよいですか?

Public void execute()
{

ClassLoader customClassLoader= new customClassLoader();
        try
        {
            Class.forName("org.xml.dd.myclass", true, xdmCustomClassLoader);
        }
        catch (ClassNotFoundException e2)
        {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        } 
        Thread.currentThread().setContextClassLoader(customClassLoader);
        ………………….
        F1();
        F2();       
}
4

1 に答える 1

2

コンテキスト クラスローダーを明示的に使用する必要があります。通常のnew操作などは、問題のコードを所有するクラスのクラスローダーを使用します。以下の例でExecutorは、担当のカスタム クラスローダーで実行するすべてのコードへのエントリ ポイントとなるクラスです。クラスローダーを使用してそのクラスをロードし、そのメソッドを呼び出しますrunrun担当するクラスローダーで実行する必要があるすべてのコードを実行するように実装する必要があります。

public class Executor {
  public void run() {
     final MyInterface x = new MyClass();
     x.f1(); x.f2();
  }
}

public class Test {
  public static void main(char[] args) throws Exception {
    final ClassLoader customCl = new customClassLoader();
    final Executor e = 
      (Executor) Class.forName("Executor", true, customCl).newInstance();
    e.run();
  }
}
于 2012-04-18T13:34:08.003 に答える