Eclipse代码如下:
public static void main(String[] args) {
try {
File file = new File("d:\\MyPersonInfo.class");
URL[] urls = new URL[] { file.toURL() };
URLClassLoader ul = new URLClassLoader(urls);
Class cla = ul.loadClass("MyPersonInfo");
} catch (Exception e) {
e.printStackTrace();
}
}其中MyPersonInfo是我编译好的一个JavaBean类,结果运行时出现java.lang.ClassNotFoundException: MyPersonInfo,并且我对ui执行ul.findResource("MyPersonInfo")返回值为null,
有人知道是怎么回事吗?

解决方案 »

  1.   

    File file = new File("d:\\MyPersonInfo.class"); 
    应该
    File file = new File("d:\\MyPersonInfo"); 
    就可以了吧. 试一下看.
      

  2.   

    答:代码没有问题啊。确信MyPersonInfo.class是放在d:/下,且MyPersonInfo类是定义在匿名包中?
      

  3.   

    答:问题不在这里的。对于 new File("d:\\MyPersonInfo.class"); 中加与不加.class,是没有关系的。你用程序测试过一下就知道了。因此,楼主的问题原因在别处
      

  4.   

    MyPersonInfo是个很简单的JavaBean。
    public class MyPersonInfo {
    String name = "cy";
    int age = 25; public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public int getAge() {
    return age;
    } public void setAge(int age) {
    this.age = age;
    }
    }有高手知道是什么问题吗?
      

  5.   

    不用加.class的。URLClassLoader的findClass做了处理:String path = name.replace('.', '/').concat(".class");。可以参考源代码,这个问题迷糊了,感觉代码应该这样用,可是跑不起来 
      

  6.   

    答:可是在我的机器上,跑你的代码,没有,运行时出现java.lang.ClassNotFoundException: MyPersonInfo,异常啊。所以我才说,楼主的问题不在此代码处啊
      

  7.   


    jiangnaisong ,Eclipse开发环境中MyPersonInfo.java文件删除了没有,如果没有删除就会被Eclipse启动时使用的类加载器加载,那样跑确实不会出错...最好把Eclipse下的java文件删除,然后clear工程,然后重启Eclipse,如果还不报错,可能就是我的环境有问题了
      

  8.   

    答:我是将MyPersonInfo.class放在d:/下,然后关闭MyEclipse,我是直接在cmd下用JDK的java.exe 来运行的啊。我没有在MyEclipse下运行啊。
    很正常啊。而且能够通过Class cla 创建MyPersonInfo对象啊。所以我才敢说:楼主的问题在别处啊。
      

  9.   

    Class cla = ul.loadClass("MyPersonInfo"); 加上你的包名Class cla = ul.loadClass("xxxx.yyyy.MyPersonInfo"); 
      

  10.   

    楼主,我刚测试通过,你好象没有设置classpath,这个2个.class文件所在的目录设置成classpath。
    我是在cmd里跑的,然后跑起来没问题!
      

  11.   

    我测试了一下,cmd下仍然报错,代码如下:
    import java.io.File;
    import java.net.URL;
    import java.net.URLClassLoader;public class MyTest { public static void main(String[] args) {
    try {
    File file = new File("d:\\MyPersonInfo.class");
    URL[] urls = new URL[] { file.toURL() };
    URLClassLoader ul = new URLClassLoader(urls);
    ul.loadClass("MyPersonInfo");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }将java文件拷到c:/
    启动cmd,执行
    cd c:\
    javac MyTest.java
    java -classpath c:/ MyTest
      

  12.   


    MyPersonInfo类有包吗?而且烤到c盘之后编译了吗?
      

  13.   

    答:Kimi说得对!你检查一下啊。
      

  14.   

    是的,讲d:/设置在classpath里面,不会出错,可是这不是我的本意,因为将它放在classpath中,这个类就会被AppClassLoader加载,我调用ul.loadClass这个方法其实是从ul的父类加器AppClassLoader加载的MyPersonInfo,而不是我的URLClassLoader加载的。