最近在做一个实验是这样的,用了javassist的Loader建了一个ParentClassLoader并且extends出两个ChildClassLoader作专门的classloader使用。 ParentClassLoader 装载Handler 两个ChildClassLoader分别装载Employer和Worker。Handler做老板和工人之间的reflection。Main程序的目的是让两个不通classloader中的方法可以相互调用,并且返回结果(Yeah, I know its fucking crazy, but...u know Boss is rubish but also everything to me...)。
很简单的程序。 
     public class Employer {
public Employer(){}
public void work throws Throwable {
 
Main.handler.work();
}
}    public class Handler implements InvocationHandler, IWork {              public Handler(){}         public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable { Object obj = method.invoke(Main.worker, args); return obj;
}            public void work() {
try {
invoke(this, Main.worker.getClass().getMethod("work"), null);

} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
} }
}
public class Worker implements IWork {        public Worker(){}
         public void work() {
System.out.println(" working...");

}
}
Crazy Main classpublic class Main {

public static Object handler;
public static Object employer;
public static Object worker;

public static void setStaticVar(Class Handler,Class Employer,Class Worker){
try {

handler = Handler.newInstance();
employer = Employer.newInstance();
worker = Worker.newInstance();

} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
public static void main(String []args){


 try {
 
 ParentClassLoader ploader = new ParentClassLoader();
 ChildClassLoader cloader1 = new ChildClassLoader(ploader);
 ChildClassLoader cloader2 = new ChildClassLoader(ploader);

Class Handler = ploader.loadClass("my.simple.Handler");
Class Employer = cloader1.loadClass("my.simple.Employer");
Class Worker = cloader2.loadClass("my.simple.Worker");

setStaticVar(Handler,Employer,Worker);
Method handlerMethod = handler.getClass().getMethod("work", null);     
                 Object o = handlerMethod.invoke(handler);
   }
}Handler中的invoke报错java.lang.NullPointerException 十分不明白什么原因。另外,跨classloader的类方法调用该如何处理?望高手!