加载外部类



我正在尝试从我指定的目录加载一个类。我做了一些研究,并做了这个:

ArrayList<Object> plugins = new ArrayList<Object>();
ClassLoader loader = Reflection.class.getClassLoader();
public Reflection()
{
    load();
}
public void load()
{
    File f = new File(Full directary);
    ClassLoader loader = null;
    try
    {
        loader = new URLClassLoader(new URL[]
        { f.toURI().toURL() }, getClass().getClassLoader());
    }
    catch (MalformedURLException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    for (File classFile : f.listFiles(new FilenameFilter()
    {
        public boolean accept(File dir, String name)
        {
            return name.endsWith(".class");
        }
    }))
    // Start for loop.
    {
        try
        {
            String filename = classFile.getName();
            System.out.println(filename);
            Class<?> cls = loader.loadClass(filename.replace(".class", ""));
            System.out.println(cls.getSuperclass().getName());
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

我得到一个NoClassDefFoundError错误:

线程"main"异常java.lang.NoClassDefFoundError: mTest123g(错误的名称:net/xcaliber/reflection/Test)

它发现类很好,但无法加载它。我做了一个基本的接口:

String getName();

这就是它的全部内容;这是我正在加载的类:

public Test()
{
    // TODO Auto-generated constructor stub
}
@Override
public String getName()
{
    return "Test";
}

这实现了接口。

显然你把类名和文件名弄混了。

Exception in thread "main" java.lang.NoClassDefFoundError: mTest123g (wrong name: net/xcaliber/reflection/Test)

所以,你加载它为java mTest123g。

类装入器期望一个mTest123g.class而不是某个net.xcaliber.reflection包中的Test类。

相关内容

  • 没有找到相关文章

最新更新