我编写了自定义类加载器,它从文件系统加载jar文件。
customClassLoader
覆盖了load和find方法及其工作方式
如何在定义类加载器之后创建所有代码,以便在方法execute的上下文中使用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();
}
答案 0 :(得分: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();
}
}