import java.net.URL;
import java.net.URLClassLoader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Client
{
static ClassLoader cl;
static ServerItf server;
public static void loadNewVersionOfServer() throws Exception{
URL serverURLs[] = new URL[]{new URL("file:server/")};//新版本文件放置地点
cl = new URLClassLoader(serverURLs);//创建类载入器
server = (ServerItf)cl.loadClass("ServerImpl").newInstance();//载入制定类并生成实例
}
public static void test() throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
loadNewVersionOfServer();
while (true)
{
System.out.println("Enter QUOTE,RELOAD,GC, or QUIT: ");
String cmdRead = br.readLine();
String cmd = cmdRead.toUpperCase();
if (cmd.equals("QUIT"))//退出程序
{
return;
}else if (cmd.equals("QUOTE"))//
{
System.out.println(server.getQuote());
}else if (cmd.equals("RELOAD"))//载入新类
{
loadNewVersionOfServer();
System.gc();//要求虚拟机回收旧类装载器
System.runFinalization();
}
else if (cmd.equals("GC"))
{
System.gc();
System.runFinalization();
}
}
}
public static void main(String args[]) {
try
{
test();
}
catch (Exception e)
{
e.printStackTrace();
}
}
};
public interface ServerItf {
public String getQuote();
}
class Reporter
{
Class cls;
Reporter(Class cls) {
this.cls = cls;
System.out.println("ServerImpl class "+cls.hashCode()+" loaded into VM");
}
protected void finalize(){
System.out.println("ServerImpl class "+cls.hashCode()+" unloaded from VM");
}
};
public class ServerImpl implements ServerItf
{
static Object reporter = new Reporter(ServerImpl.class);
public String getQuote(){ return " A rolling stong gathers no moss";}
}
};