gpt4 book ai didi

java - URLClassLoader ClassNotFoundException 异常

转载 作者:行者123 更新时间:2023-12-01 12:04:54 25 4
gpt4 key购买 nike

我正在尝试编写一段在运行时动态加载类的代码

public class URLDynClassLoader {

public URLDynClassLoader(){
try{
loadclasses( new File("C:/Users/Miller/Desktop/test/") , "Shapes." );
}
catch(ClassNotFoundException e){
e.printStackTrace();
System.out.println(e.getMessage());
}
catch( Exception f ){
System.out.println(f.getMessage());
System.out.println("error");
}
}

private ArrayList<String> getClassNames( File folder ){
File[] listOfFiles = folder.listFiles();
ArrayList<String> fileNames = new ArrayList<String>() ;
for (File file : listOfFiles) {
if (file.isFile()) {
if( accept(file.getName()) ){
fileNames.add(file.getName());
}
}
}
return fileNames ;
}

ArrayList<Class> loadclasses( File folder , String packageName ) throws MalformedURLException, ClassNotFoundException{

URLClassLoader load = URLClassLoader.newInstance( new URL[] { folder.toURL() }) ;
ArrayList<Class> data = new ArrayList<Class>();
ArrayList<String> names = getClassNames(folder);

for(int i=0 ; i<names.size() ; ++i){;
data.add(load.loadClass( fixName( packageName , names.get(i) ) ));
System.out.println("i"+i);
}

return data ;
}

private String fixName(String packageName, String className ) {
className = className.replaceAll(".class", "");
return packageName+className;
}

public boolean accept(String arg) {
return arg.endsWith(".class");
}

public static void main(String[] args) {
new URLDynClassLoader();
}

}

问题是这一直给我 classNotFound 异常,但我很确定文件 .class 存在于该目录中,另一件事我尝试加载已经加载的类并且它有效,所以只有在以下情况下它才不起作用我的代码没有类文件!!

最佳答案

问题似乎出在方法 getClassNames() 上。在加载类之前,您能否检查从 fixName() 返回的完全限定类名?它会让您更好地了解代码有什么问题。

我运行了您的示例代码,并将硬编码值传递给 fixName() (不使用 getClassNames()),并且它能够加载类文件。

关于java - URLClassLoader ClassNotFoundException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27683319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com