网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > 新手入门 > 基础入门 > java动态调用的范例  

java动态调用的范例

2008-06-16  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

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

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

网管u家u.bitscn@com

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

网管bitscn_com

public class testLoad{

网管联盟bitsCN_com

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

    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.");
    }

网管u家u.bitsCN.com

}

网管bitscn_com

package test;

网管网www_bitscn_com

public class testLoad{ 网管u家u.bitsCN.com

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

网管论坛bbs_bitsCN_com

    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.");
    } 网管网www.bitscn.com

}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; 中国网管联盟bitsCN.com


public class DynamicLoad extends URLClassLoader { 网管论坛bbs_bitsCN_com

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

网管联盟bitsCN@com

        dyn_load_class();
        dyn_load_jar(); 网管bitscn_com

    }

网管bitscn_com

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

网管下载dl.bitscn.com

        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]);
            } 网管网www_bitscn_com

            Method mainMethod = cd.getMethod("main", new Class[]{String[].class});
            String params[]={"aa","bb"};
            mainMethod.invoke(null, new Object[] {params});//执行 main 方法 中国网管论坛bbs.bitsCN.com

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

网管联盟bitsCN_com

        } catch (Exception e) {
            e.printStackTrace();
        } 中国网管论坛bbs.bitsCN.com

    } 网管u家u.bitsCN.com


    public static void dyn_load_jar() {
        DynamicLoad d = new DynamicLoad();
        d.addPath("ttest.jar"); //指向 .jar 具体路径
    } 网管下载dl.bitscn.com

    public DynamicLoad() {
        super(new URL[0], ClassLoader.getSystemClassLoader());
    } 网管网www.bitscn.com

    public void addPath(String paths) {
        if (paths == null || paths.length() <= 0) {
            return;
        } 网管网www.bitscn.com

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

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

                    File pathToAdd = new File(pathToAdds[i]).getCanonicalFile();
                    addURL(pathToAdd.toURL());
                    System.out.println(pathToAdd.toURL());
                    Class c = this.loadClass("test.testLoad"); //class名(饱含包名) 网管bitscn_com

                    Field[] f = c.getDeclaredFields();
                    for (int k = 0; k < f.length; k++) {
                        System.out.println(f[k]);
                    } 网管联盟bitsCN_com

                    Method mainMethod = c.getMethod("testing", new Class[]{String.class});
                    String params="小橙子";
                    String ret=(String)mainMethod.invoke(null, params);//执行方法
                    System.out.println("test.testLoad.testing() return:"+ret); 网管u家u.bitscn@com

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

网管网www_bitscn_com

            }

网管u家u.bitsCN.com

        }

网管联盟bitsCN_com

    } 网管联盟bitsCN@com

}

中国网管论坛bbs.bitsCN.com

import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader; 网管u家u.bitscn@com


  网管联盟bitsCN_com

网管论坛bbs_bitsCN_com


TAGs
 上一篇:开发过程中常见问题   下一篇:java 常用IO操作
java动态调用的范例 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: