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该类将成为您希望使用您的自定义类加载器执行的所有代码的入口点。使用您的类加载器加载该类并调用它的方法run。您应该实现run,以便它执行需要由您的类加载器负责运行的所有代码。

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 回答