[英]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.