请教各位大佬:classA和classB是由各自的类加载器加载的,已知A先加载,B后加载。classC与B在同一jar内,同一个类加载器加载。当我在B中调用A的一个方法,参数是C的新实例,就报ClassNotFoundExceptionC,请问该如何解决?谢谢!补充一点,我在B中调用的A的方法的参数是Object类型的,A本身是完全不知道有C的存在的。经过实际验证,发现A的ClassLoader是B的ClassLoder的父加载器。
2 回答

手掌心
TA贡献1942条经验 获得超3个赞
再次首先感谢各位的回答与讨论,@临风的答案与实际情况是最接近的。我的解决办法如下:ClassB:static{try{Methodmethod=URLClassLoader.class.getDeclaredMethod("addURL",URL.class);method.setAccessible(true);URLurl=B.class.getProtectionDomain().getCodeSource().getLocation();//B和C所在的jarmethod.invoke(A.class.getClassLoader(),url);//让A的类加载器去BC.jar里加载//其中,只要在这里(B中)显式地加载了ClassC,仍会报错。Class>clazz=Class.forName("C",true,A.class.getClassLoader());System.out.println(clazz);A.method(clazz.getConstructor().newInstance());}catch(Throwablee){e.printStackTrace();}}
添加回答
举报
0/150
提交
取消