import java.io.*;
import java.net.*;
import java.lang.reflect.*;
public class LoadNetR extends ClassLoader{
private byte[] data;
private String myname;
public LoadNetR(String url){
readBytes(url);
myname=new Jcf(data).className();
}
String lcname(){return myname;}
protected Class loadClass(String name, boolean resolve)
throws ClassNotFoundException{
Class clazz = null;
try{ return findSystemClass(name); }
catch(Throwable e){}
clazz=findLoadedClass(name);
if(clazz != null){ return clazz; }
clazz=myFindClass(name);
if(clazz == null ){ throw new ClassNotFoundException(name); }
if(resolve){ resolveClass(clazz); }
return clazz;
}
void readBytes(String u){
data=new byte[4096];
int total=0, n;
try{
URL url=new URL(u);
InputStream is=url.openStream();
while((n=is.read(data,total,data.length-total))>=0){
if((total+=n) == data.length){
byte newdata[]=new byte[total*2];
System.arraycopy(data, 0, newdata, 0, total);
data = newdata;
}
}
byte[] b=new byte[total];
System.arraycopy(data, 0, b, 0, total);
data=b;
}catch(IOException e){}
}
private synchronized Class myFindClass(String name){
try{
return defineClass(name, data, 0, data.length);
}catch(Throwable e){
System.out.println(e.getMessage());
throw new ClassFormatError();
}
}
public static void main(String args[]){
LoadNetR loader=new LoadNetR(args[0]);
try{
Class c=loader.loadClass(loader.lcname());
Object o=c.newInstance();
Method m=c.getMethod(args[1], null);
m.invoke(o, null);
}catch(Throwable e){
e.printStackTrace();
}
}
}