现有一个实现接口MyInterface的类mypackage.MyClass Class c=Class.forName("mypackage.MyClass"); MyInterface mi=(MyInterface)c.newInstance();要求mypackage.MyClass有public、无参数的构造方法(如果有参数,参考Class这个类的文档)
采用URLClassLoader加载远程类文件即可,以下是一个简单实例: 1.首先写一个类放置于远程的主机,比如ftp上,代码如下: /* * ******************************************** */ import javax.swing.JOptionPane;public class Test { public static void main(String[] args) { Test test = new Test(); test.showGreeting("hello"); }
public Test(){ }
public void showGreeting(String greeting){ JOptionPane.showMessageDialog(null,greeting); } } /* * ******************************************** */将此类编译后置于ftp主机上,如:ftp://192.168.1.1102.在本地编写一个调用类,示例代码如下:/* * ******************************************** */ import java.net.*; import java.lang.reflect.*;public class FtpGreeting { public static void main(String[] args) { FtpGreeting fg = new FtpGreeting(); }
public FtpGreeting(){ try{ URL url = new URL("ftp://192.168.1.110"); URL[] urls = new URL[]{url}; URLClassLoader ucl = new URLClassLoader(urls,this.getClass().getClassLoader()); Class cls = ucl.loadClass("Test"); Method greeting = cls.getMethod("showGreeting",new Class[]{String.class}); greeting.invoke(cls.newInstance(),new Object[]{new String("hi! how are you!")}); }catch(Exception e){ e.printStackTrace(); } } }/* * ******************************************** */这样,在本地运行的时候就会加载ftp上的类文件了
更正一下,上面调用类中的:URL url = new URL("ftp://192.168.1.110");应该改为: URL url = new URL("ftp://192.168.1.110/");
Class c=Class.forName("mypackage.MyClass");
MyInterface mi=(MyInterface)c.newInstance();要求mypackage.MyClass有public、无参数的构造方法(如果有参数,参考Class这个类的文档)
1.首先写一个类放置于远程的主机,比如ftp上,代码如下:
/*
* ********************************************
*/
import javax.swing.JOptionPane;public class Test { public static void main(String[] args) {
Test test = new Test();
test.showGreeting("hello");
}
public Test(){
}
public void showGreeting(String greeting){
JOptionPane.showMessageDialog(null,greeting);
}
}
/*
* ********************************************
*/将此类编译后置于ftp主机上,如:ftp://192.168.1.1102.在本地编写一个调用类,示例代码如下:/*
* ********************************************
*/
import java.net.*;
import java.lang.reflect.*;public class FtpGreeting { public static void main(String[] args) {
FtpGreeting fg = new FtpGreeting();
}
public FtpGreeting(){
try{
URL url = new URL("ftp://192.168.1.110");
URL[] urls = new URL[]{url};
URLClassLoader ucl = new URLClassLoader(urls,this.getClass().getClassLoader());
Class cls = ucl.loadClass("Test");
Method greeting = cls.getMethod("showGreeting",new Class[]{String.class});
greeting.invoke(cls.newInstance(),new Object[]{new String("hi! how are you!")});
}catch(Exception e){
e.printStackTrace();
}
}
}/*
* ********************************************
*/这样,在本地运行的时候就会加载ftp上的类文件了