private static void launch(String program, String[] programArgs, List urls) { Collections.reverse(urls); URL[] urlArray = (URL[]) urls.toArray(new URL[urls.size()]); URLClassLoader cl = new MainClassLoader(urlArray); Thread.currentThread().setContextClassLoader(cl); try { Class clazz = cl.loadClass(program); Method main = clazz.getDeclaredMethod("main", new Class[]{String[].class}); main.invoke(null, new Object[]{programArgs}); } catch (Exception e) { e.printStackTrace(); } }
public Class loadClass(String name, boolean resolve) throws ClassNotFoundException { if (name.startsWith("org.xml.") || name.startsWith("org.w3c.") || name.startsWith("java.") || name.startsWith("javax.") || name.startsWith("sun.") || name.startsWith("com.sun.")) { return super.loadClass(name, resolve); } ClassLoader parent = getParent(); // First, check if the class has already been loaded Class c = findLoadedClass(name); if (c == null) { try { c = findClass(name); } catch (Throwable t) { // If still not found, only then ask the parent c = parent.loadClass(name); } } if (resolve) { resolveClass(c); } return c; } }