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