Java by API/java.net/URLClassLoader

Материал из Java эксперт
Перейти к: навигация, поиск

extends URLClassLoader

   <source lang="java">
 

import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.net.JarURLConnection; import java.net.URL; import java.net.URLClassLoader; import java.util.jar.Attributes; public class Main extends URLClassLoader {

 private URL url;
 public Main(URL url) {
   super(new URL[] { url });
   this.url = url;
 }
 public String getMainClassName() throws IOException {
   URL u = new URL("jar", "", url + "!/");
   JarURLConnection uc = (JarURLConnection) u.openConnection();
   Attributes attr = uc.getMainAttributes();
   return attr != null ? attr.getValue(Attributes.Name.MAIN_CLASS) : null;
 }
 public void invokeClass(String name, String[] args) throws ClassNotFoundException,
     NoSuchMethodException, InvocationTargetException {
   Class c = loadClass(name);
   Method m = c.getMethod("main", new Class[] { args.getClass() });
   m.setAccessible(true);
   int mods = m.getModifiers();
   if (m.getReturnType() != void.class || !Modifier.isStatic(mods) || !Modifier.isPublic(mods)) {
     throw new NoSuchMethodException("main");
   }
   try {
     m.invoke(null, new Object[] { args });
   } catch (IllegalAccessException e) {
   }
 }

}


 </source>
   
  
 
  



new URLClassLoader(URL[] urls)

   <source lang="java">
 

import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; public class Main {

 static public void main(String args[]) throws Exception {
   URL myurl[] = { new URL("file:///C:/CH3/ClassLoader/web/"),
       new URL("http://www.jexp.edu/~xyx/test/") };
   URLClassLoader x = new URLClassLoader(myurl);
   Class c = x.loadClass("TestURL");
   Class getArg1[] = { (new String[1]).getClass() };
   Method m = c.getMethod("main", getArg1);
   String[] my1 = { "arg1 passed", "arg2 passed" };
   Object myarg1[] = { my1 };
   m.invoke(null, myarg1);
   Object ob = c.newInstance();
   Class arg2[] = {};
   Method m2 = c.getMethod("tt", arg2);
   m2.invoke(ob, null);
   Class arg3[] = { (new String()).getClass(), int.class };
   Method m3 = c.getMethod("tt", arg3);
   Object myarg2[] = { "Arg1", new Integer(100) };
   m3.invoke(ob, myarg2);
 }

}


 </source>
   
  
 
  



URLClassLoader: getURLs()

   <source lang="java">
 

import java.net.URL; import java.net.URLClassLoader; public class Main {

 public static void main(String[] args) {
   ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader();
   URL[] urls = ((URLClassLoader) sysClassLoader).getURLs();
   for (int i = 0; i < urls.length; i++) {
     System.out.println(urls[i].getFile());
   }
 }

}


 </source>