package studio.utils; import java.io.IOException; import java.util.Collections; import java.util.HashSet; import java.util.Set; public class JMClassLoader extends ClassLoader { private Set loadedClasses = Collections.synchronizedSet(new HashSet()); public Class loadClass(String name,boolean resolve) throws ClassNotFoundException { Class clas = null; // If the class has already been loaded, just return it. clas = findLoadedClass(name); if (clas != null) return clas; // Try to load the class directly from disk try { // Get the raw bytes, if they are there. byte classBytes[] = ClassLoaderUtil.getClassBytes(name); // We got them! Turn the bytes into a class. clas = defineClass(name,classBytes,0,classBytes.length); } catch (IOException ie) { } // We weren't able to get the class, so // use the default Classloader. if (clas == null) clas = Class.forName(name); // If we still can't find it, then it's a real // exception. if (clas == null) throw new ClassNotFoundException(name); // Resolve the class -- load all the classes // that this needs, and do any necessary linking. if (resolve) resolveClass(clas); // Record the class, so we can put it into // a JAR file. loadedClasses.add(clas.getName()); // Return the class to the runtime system. return clas; } public Set getLoadedClasses() { return loadedClasses; } }