java在从Classloader加载“scl”字段时没有此类字段异常
我将代码从JDK 8移动到OpenJDK 12。在这样做的同时,我面临以下问题:
java.lang.NoSuchFieldException: scl
在尝试调用ClassLoader时。班getDeclaredField(“scl”)。这在Java8中运行良好,但在较新的Java版本中不再有效
我做了一些发现,并相信这与自Java8以来反射的工作方式和内部Java包的使用发生了变化有关
Set<URL> classLoaderUrls = computeClassLoaderUrls();
ClassLoader bootstrapClassLoader = ClassLoader.getSystemClassLoader().getParent();
this.classLoader = new URLClassLoader(classLoaderUrls.toArray(new URL[classLoaderUrls.size()]), bootstrapClassLoader);
Field systemClassLoaderField = ClassLoader.class.getDeclaredField("scl");
systemClassLoaderField.setAccessible(true);
this.initialSystemClassLoader = (ClassLoader) systemClassLoaderField.get(null);
systemClassLoaderField.set(null, this.classLoader);
我想知道,访问这些classloader
及其字段的方式是否已经改变,或者我应该使用其他字段而不是scl
。谢谢
共 (0) 个答案