我是如下实现过程:1通过System.setProperty("java.class.path","xxxx");将一个从配置文件中读到的路径,设置到当前系统的classpath中。
2通过Class.forName("xxx.xxx").newInstance();来得到这个类。
  可此处会报ClassNotFoundException,说明1没有设置上,可1设置完,我重新读了环境变量,确实变了。不知道问题出在哪。能人指导下,是不是思路有问题。

解决方案 »

  1.   

    我试过了,完全没有问题啊。package com.reg;public class Test3 {
      
      private String name = "dduan";  public static void main(String[] args) throws Exception {
        System.setProperty("java.class.path", "com.reg.Test3");
        System.out.println(System.getProperty("java.class.path"));
        Test3 t = (Test3) Class.forName("com.reg.Test3").newInstance();
        System.out.println(t.name);
      }
    }输出:
    com.reg.Test3
    dduan
    楼主System.setProperty("java.class.path","xxxx");改成System.setProperty("java.class.path","xxx.xxx");试试
      

  2.   

    要保证:
    System.setProperty("java.class.path","xxxx");

    Class.forName("xxx.xxx").newInstance();
    里面的xxx.xxx是一样的。就像我测试的时候都是com.reg.Test3.给出类的全路径,包括包名。
      

  3.   

    那如果比如是D:\test\下的所有.class文件或.jar文件,该如何做。先谢谢LS的朋友。
      

  4.   

    一般动态加载类都是直接用Class.forName()这个方法,但这个方法只能创建程序中已经引用的类,并且只能用包名的方法进行索引,比如 Java.lang.String,不能对一个.class文件或者一个不在程序引用里的.jar包中的类进行创建。但使用URLClassLoader 就可以直接根据创建一个单独的.class文件,并且每当重新载入后并实例化后都是最新的方法。类似于jsp,当你在eclipse中改了一个jsp并且存储后,只要刷新页面就可以得到最新的结果而不用重新启动服务器。 
        URLClassLoader是在java.net包下的一个类。他的构造函数输入参数需要输入1个URL数组。File xFile = new File("c:\\temp\\test.jar");
        URL xUrl = xFile.toURL();
        URLClassLoader ClassLoader = new URLClassLoader(new URL[] {xUrl });
        Class xClass = ClassLoader.loadClass("com.reg.Test3");
        Object xObject = xClass.newInstance();
        Field field = xClass.getDeclaredField("name");
        System.out.println(field);
      

  5.   

    网上发现了
    大致是;
    loader = URLClassLoader(new URL()[]{"D:\test.jar"});
    loader.loadClass("xxx.xxx");
      

  6.   


    File xFile = new File("c:\\temp\\test.jar");
        URL xUrl = xFile.toURI().toURL();
        URLClassLoader ClassLoader = new URLClassLoader(new URL[] {xUrl });
        Class xClass = ClassLoader.loadClass("com.reg.Test3");
        Object xObject = xClass.newInstance();
        Field field = xClass.getDeclaredField("name");
        field.setAccessible(true);
        System.out.println(field.get(xObject));具体关于反射,建议看看书。
      

  7.   

    呵呵,没仔细写,只知道这原理就行。
    正在读tomcat的源码,里面有相关操作。