当我们Jvm中存在两个不同的ClassLoader,想要从一个ClassLoader里调用另一个ClassLoader里的Class如何操作
此操作很危险,当使用了此方法以后,加载到另一个ClassLoader的类不应再在原来的ClassLoader里使用,否则将找不到此类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| static { try { Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); method.setAccessible(true); URL url = Helper.class.getProtectionDomain().getCodeSource().getLocation(); method.invoke(WantLoadClassLoaderSomeClass.class.getClassLoader(), url); Class<?> clazz = Class.forName("AddClassName", true, MinecraftForge.class.getClassLoader()); WantLoadClassLoaderSomeClass.register(clazz.newInstance()); }catch (Throwable e){ e.printStackTrace(); } }
|