/* * Copyright 2004-2005 NAKAMURA Minoru (nminoru@nminoru.jp) */ import java.io.File; import java.io.InputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.regex.PatternSyntaxException; import java.util.Vector; import java.lang.reflect.*; public class UnloadableClassLoader { public static URL[] convertClasspathToURLs(String classpath) { Vector tmpArray = new Vector(); URL[] urls = null; try { String[] parts = classpath.split(File.pathSeparator); for (int i=0 ; i= 2) { URL[] urls = convertClasspathToURLs(args[0]); final int len = args.length - skip_args; String[] new_args = new String[len]; System.arraycopy(args, skip_args, new_args, 0, len); try { UnloadableClassLoader app = new UnloadableClassLoader(); app.loadClass(urls, args[skip_args - 1], new_args); app = null; System.gc(); } catch(Throwable t) { ; } } } protected void loadClass(URL[] classPath, String className, String[] args) { URLClassLoader loader = new URLClassLoader(classPath); try { Class c = loader.loadClass(className); Method method = getMainMethod(c); if (method != null) { method.invoke(null, new Object[] {args}); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch(IllegalAccessException e) { e.printStackTrace(); } catch(InvocationTargetException e) { e.printStackTrace(); } loader = null; } protected Method getMainMethod(Class c) { Method method = null; try{ method = c.getMethod("main", new Class[] {String[].class}); } catch (Exception e){ e.printStackTrace(); } return method; } }