我已经在OpenJDK& amp;上的三台Windows机器和两台Linux VPS上测试了不同版本的Java。 Oracle JDK。它完美运行,然后突然之间,它只能在我的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;
}
}
需要注意的是,我希望许多类加载器能够在同一名称/包中加载不同的文件,因此我使用单独的类加载器将它们分开,但是在测试中,未经过测试。
现在,这在过去一直运作良好,我不知道为什么它会停止。我会假设我打破了一些东西,但代码仍然在我的IDE中运行?
答案 0 :(得分:0)
这似乎是你的错误:
public JavaLoaderClassLoader(URL[] url, ClassLoader parent) {
super(url);
}
您不是通过超级构造函数安装parent
作为父类加载器。