Java Class.isAssignableFrom总是返回false …只在IDE之外

我已经在OpenJDK和Oracle JDK上的三个Windows机器和两个不同版本的Java上testing了两个Linux VPS。 它的function完美,突然之间,它只能在我的IDE中工作,虽然我没有更改任何相关的代码,我无法想象会是什么原因造成的。

系统中的常见代码:

Class<?> cls = (session == null ? secjlcl : session.getJLCL()).loadClass(name); Logger.log(JavaLoader.class.isAssignableFrom(cls) + " - " + cls + " - " + cls.getSuperclass().getName()); if (JavaLoader.class.isAssignableFrom(cls)) { 

而我的ClassLoader:

 public class JavaLoaderClassLoader extends URLClassLoader { public JavaLoaderClassLoader(URL[] url, ClassLoader parent) { super(url); } private HashMap<String, Class<?>> javaLoaders = new HashMap<String, Class<?>>(); public String addClass(byte[] data) throws LinkageError { Class<?> cls = defineClass(null, data, 0, data.length); javaLoaders.put(cls.getName(), cls); return cls.getName(); } public Class<?> loadClass(String name, boolean resolve) { if (javaLoaders.containsKey(name)) return javaLoaders.get(name); try { Class<?> see = super.loadClass(name, resolve); if (see != null) return see; }catch (ClassNotFoundException e) { Logger.logError(e); } return null; } public void finalize() throws Throwable { super.finalize(); javaLoaders = null; } } 

值得注意的是,我希望很多类加载器都使用相同的名称/包加载不同的文件,所以我使用单独的类加载器来保持它们的独立性,然而在testing中,这并未经过testing。

现在,这个过程已经完美无缺了,而且我为什么停止了零。 我会假设我打破了一些东西,但代码仍然在我的IDE?

这似乎是你的错误:

 public JavaLoaderClassLoader(URL[] url, ClassLoader parent) { super(url); } 

您不通过超级构造函数安装parent类作为父类加载器。