public Class findClass(String name) throws ClassNotFoundException{ if(!"test_class.A".equals(name)) throw new ClassNotFoundException("No class " + name + " found.");
byte[] b = loadData();
Class cls = super.defineClass(name, b, 0, b.length); return cls; }
类文件错误,也就是说你没有把这个类加载上去。
-------------------------------------------------------------------
ParentLoader:
package test_classloader;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class ParentLoader extends ClassLoader{
private final static String FILE = "d:/test/A.class";
public Class findClass(String name) throws ClassNotFoundException{
if(!"test_class.A".equals(name))
throw new ClassNotFoundException("No class " + name + " found.");
byte[] b = loadData();
Class cls = super.defineClass(name, b, 0, b.length);
return cls;
}
private byte[] loadData(){
System.out.println("Loaded A.");
File file = new File(FILE);
byte[] data = new byte[(int)file.length()];
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
fis.read(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return data;
}}
-------------------------------------------------------------------
ChildLoader:
package test_classloader;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class ChildLoader extends ClassLoader {
private final static String FILE = "d:/test/B.class";
public ChildLoader(ClassLoader parent){
super(parent);
}
public Class findClass(String name) {
byte[] b = loadData();
return super.defineClass(name, b, 0, b.length);
}
private byte[] loadData(){
System.out.println("Loaded B."); File file = new File(FILE);
byte[] data = new byte[(int) file.length()];
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
fis.read(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} return data;
}
}
-------------------------------------------------------------------
这样就可以了,类加载器是先由其父类加载器去尝试加载,如果没有,则再由子加载器加载的,
希望这些能对楼主有用,^_^