我试图实现我自己的类加载器,它必须是应用程序的透明度,并且仍然会出现NoClassDefError错误。 这是我的自定义类加载器:
Python Project
这是我的主要代码:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class CustomClassLoader extends ClassLoader{
public CustomClassLoader(ClassLoader parent) {
super(parent);
}
public Class loadClass(String name) throws ClassNotFoundException {
System.out.print(name);
if(!"MyObject".equals(name)){
System.out.println("Super load class function");
return super.loadClass(name);
}
try {
System.out.println("Go to load class function");
String url = "file:C:/Users/ahmad/Desktop/CustomClassLoader/class/MyObject.class";
URL myUrl = new URL(url);
URLConnection connection = myUrl.openConnection();
InputStream input = connection.getInputStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int data = input.read();
while(data != -1){
buffer.write(data);
data = input.read();
}
input.close();
byte[] classData = buffer.toByteArray();
return defineClass(name, classData, 0, classData.length);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
with -Djava.system.class.loader =" CustomClassLoader" VM的参数。
是否遗漏了任何东西。 非常感谢。
答案 0 :(得分:0)
您不应该使用该系统属性。尝试按照建议here
使用loadClass方法和反射Object main = loader.loadClass("Main", true).newInstance();
答案 1 :(得分:0)
应该传递给构造函数的ClassLoader
实例究竟是什么?
无论如何你的实现都是错误的,因为你没有先委托父母(这就是它在Java SE中的工作方式)。