| 12
 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