普通网友 2010-06-18 15:12
浏览 787
已采纳

URLClassLoader加载class文件的疑惑

最近用到了URLClassLoader的loadClass()方法,就写了个测试例子,结果出现了问题。具体问题如下所述:

[b]首先,给出测试代码,该代码贴到Main函数了直接可以运行[/b]:

[code="java"]URLClassLoader loader = null;
try {
URL[] urls = new URL[1];
URLStreamHandler streamHandler = null;
//E:\mp_workspace\HttpServer2.0\webRoot 是工程下一目录,用来存放测试的class文件
String respository = new URL("file",null,” E:\mp_workspace\HttpServer2.0\webRoot”)toString();
urls[0] = new URL(null,respository,streamHandler);

        loader = new URLClassLoader(urls);

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

    Class className = null;
    try {
        className = loader.loadClass(“Myclass”);
        System.out.println(className.getName());
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    Myclass myclass = null;
    try {
        myclass = (Myclass)className.newInstance();
        myclass.test();
    } catch (Exception e) {
        e.printStackTrace();
    }

[/code]

要测试的类Myclass.java的代码如下,注意它的[b]包名[/b]:

[code="java"]package com.test;

public class Myclass {

public void test() {
System.out.println("good byte");
}

public static void main(String[] args) {

System.out.println("hello word");
}
}[/code]

现在问题是运行上面测试代码是:当Myclass.java在包com.test里面时,运行上面的测试代码会报错。错误信息是:

[color=red]Exception in thread "main" java.lang.NoClassDefFoundError: Myclass (wrong name: com/test/Myclass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)[/color]

[color=blue][size=medium]但是比较奇怪的是,我把Myclass类直接移到源文件src下载,即Myclass没有包名时,运行则通过,没有一点问题。[/size][/color]

我想,这与我还不太了解URLClassLoader这个类有关吧。请大家帮我看看,在你们的IDE上调试下,这个问题我琢磨了很久,还是想不出所以然啊。

  还有,我的工程名是HttpServer2.0 ,我在工程下建了一个目录webRoot,专门用来放测试的class文件。上面的例子,就是我先通过eclipse编译了Myclass.java,在bin下生成了Myclass.class文件,然后我将该文件复制到webRoot目录下进行测试的。

最奇怪的一点是:[size=medium][color=blue]src下有Myclass.java类则上面测试没问题,否则会报错[/color][/size]

  • 写回答

3条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥50 关于github项目下载运行
      • ¥15 苹果手机删除了qq软件,qq文件怎么恢复
      • ¥20 用mips 人力编程排序问题(能在mars按要求运行)
      • ¥15 Verilog小型神经网络(单层反馈神经网络)
      • ¥15 设计一个数字钟,实现时分秒的显示
      • ¥15 Clion使用头文件链接两个cpp
      • ¥15 51单片机无法触发外部中断问题
      • ¥15 基于半监督,无监督的调制识别
      • ¥15 cst求 阵列 rcs 时候 频域 时域求解器 应该怎样设置 才让两者 计算结果 相似 请附图
      • ¥15 关于#51单片机#的问题:大家帮我看一下为什么我的计时器数字一直不稳定