1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
class OurClassLoader extends ClassLoader
{
static private Vector dynLoadedClasses;
public OurClassLoader()
{
dynLoadedClasses = new Vector();
}
private Class getDynamicallyLoadedClass(String className)
{
Class c = null;
for (int i = 0; i < dynLoadedClasses.size(); i++)
{
c = (Class)dynLoadedClasses.get(i);
if (className.equals(c.getName()))
return c;
}
return null;
}
public synchronized Class loadClass(String className) throws ClassNotFoundException
{
return loadClass(className, false);
}
public synchronized Class loadClass(String className, boolean resolve) throws ClassNotFoundException
{
Class c = getDynamicallyLoadedClass(className);
if (c != null)
return c;
return super.loadClass(className, resolve);
}
public Class findClass(String className) throws ClassNotFoundException
{
Class c = getDynamicallyLoadedClass(className);
if (c != null)
return c;
return super.findClass(className);
}
public synchronized Class loadClassFromBytes(String className, byte[] bytecode, boolean resolve) throws Exception
{
Debug.printTrace("chargement de "+className+".");
Class c;
for (int i = 0; i < dynLoadedClasses.size(); i++)
{
c = (Class)dynLoadedClasses.get(i);
if (className.equals(c.getName()))
return c;
}
c = defineClass(className, bytecode, 0, bytecode.length);
if (resolve)
resolveClass(c);
dynLoadedClasses.add(c);
return c;
}
public byte[] getClassByteCode(String className) throws FileNotFoundException, IOException
{
Debug.printTrace("Lecture du fichier class "+className+".class...");
File file = new File(className+".class");
byte[] bytecode = new byte[(int)file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(bytecode, 0, bytecode.length);
return bytecode;
}
} |
Partager