首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URLClassLoader ClassNotFoundException

URLClassLoader ClassNotFoundException
EN

Stack Overflow用户
提问于 2014-12-29 12:16:02
回答 2查看 1.5K关注 0票数 0

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

代码语言:javascript
复制
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存在于该目录中,这是我尝试加载已经加载类的另一件事,并且它起作用了,所以只有当我的代码没有类文件时它才不起作用!!

EN

回答 2

Stack Overflow用户

发布于 2014-12-29 13:29:36

问题似乎出在getClassNames()方法上。在加载类之前,可以检查一下从fixName()返回的全限定类名吗?它将使您更好地了解代码的错误所在。

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

票数 1
EN

Stack Overflow用户

发布于 2022-02-02 14:50:03

答案可能很愚蠢,但对我来说,问题是我的项目在一个文件夹中,这个文件夹受到某种程度的管理员保护。

我尝试了许多“解决方案”,但我记得当我试图解压一个文件到我的项目文件夹(一些我认为可以修复它的.jar库)时,它一直说它无法解压缩,因为管理员权限之类的原因。

每当我将其解压到其他地方并手动复制粘贴时,它会询问“管理员同意”,然后我单击“是”,我就可以复制文件了。

我的猜测是,它试图在文件夹中查找对其没有访问权限的类,并返回null。它会返回这个错误!

因此,如果有人遇到类似的"URLClassLoader“和”PolicyException“问题,也请确保它位于正确的文件夹中!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27683319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档