簡體   English   中英

加載外部類

[英]Loading external classes

我正在嘗試從指定的目錄中加載類。 我做了一些研究,並做了以下工作:

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錯誤:

線程“主”中的異常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。 類加載器期望某個net.xcaliber.reflection包中的mTest123g.class不是Test類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM