java动态调用的范例(包括class/jar)

2008-06-16 11:32:52 来源:中国自学编程网 作者:佚名 点击:
动态调用 JAVA CLASS/JAR,不是难事。只是随便搜索了一下,没有完整的过程。于是,综合了一下,写不个综合的范例,以便提供参考。 目录结构

 

  动态调用 JAVA CLASS/JAR ,不是难事。只是随便搜索了一下,没有完整的过程。于是,综合了一下,写不个综合的范例,以便提供参考。 目录结构:
{CURDIR}\DynamicLoad.java
      \{test}
        \testLoad.java

{CURDIR}\DynamicLoad.java
      \{test}
        \testLoad.java

testLoad.java
的源码: view plaincopy to clipboardprint?
package test;

public class testLoad{

public static String testing(String name){
return "Hello, "+name+"! I am a public static method, I will return a String.";
}

public static void main(String []argv){
System.out.println("------------------------------Begin.");
System.out.println("Hello, dynamac load class testing!");
for(int i=0; i<argv.length; i++)
System.out.println("argv["+(i)+"]="+argv[i]);
System.out.println("------------------------------End.");
}

}

package test;

public class testLoad{

public static String testing(String name){
return "Hello, "+name+"! I am a public static method, I will return a String.";
}

public static void main(String []argv){
System.out.println("------------------------------Begin.");
System.out.println("Hello, dynamac load class testing!");
for(int i=0; i<argv.length; i++)
System.out.println("argv["+(i)+"]="+argv[i]);
System.out.println("------------------------------End.");
}

}DynamicLoad.java
的源码: view plaincopy to clipboardprint?
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;


public class DynamicLoad extends URLClassLoader {

public static void main(String[] args) throws Exception {

dyn_load_class();
dyn_load_jar();

}

public static void dyn_load_class() {
File xFile = new File("test"); //
指向 class 所在的目录
URL xUrl;

try {
xUrl = xFile.toURL();
URLClassLoader ClassLoader = new URLClassLoader(new URL[]{xUrl});
Class cd = ClassLoader.loadClass("test.testLoad"); //class
名(饱含包名 )
Field[] f = cd.getDeclaredFields();
for (int k = 0; k < f.length; k++) {
System.out.println(f[k]);
}

Method mainMethod = cd.getMethod("main", new Class[]{String[].class});
String params[]={"aa","bb"};
mainMethod.invoke(null, new Object[] {params});//
执行 main 方法

System.out.println("\n");

} catch (Exception e) {
e.printStackTrace();
}

}


public static void dyn_load_jar() {
DynamicLoad d = new DynamicLoad();
d.addPath("ttest.jar"); //
指向 .jar 具体路径
}

public DynamicLoad() {
super(new URL[0], ClassLoader.getSystemClassLoader());
}

public void addPath(String paths) {
if (paths == null || paths.length() <= 0) {
return;
}

String separator = System.getProperty("path.separator");
String[] pathToAdds = paths.split(separator);

for (int i = 0; i < pathToAdds.length; i++) {
if (pathToAdds[i] != null && pathToAdds[i].length() > 0) {
try {

File pathToAdd = new File(pathToAdds[i]).getCanonicalFile();
addURL(pathToAdd.toURL());
System.out.println(pathToAdd.toURL());
Class c = this.loadClass("test.testLoad"); //class

9 7 3 1 2 3 4 8 :


logo

本类最新行业评测技巧教程学院
本类热点本日本周本月
本类推荐本日本周本月

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203