有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案