【问题标题】:java.lang.ClassNotFoundException on classloader类加载器上的 java.lang.ClassNotFoundException
【发布时间】:2016-01-30 08:02:35
【问题描述】:

这段代码的想法是接收一些扩展我在服务器上的另一个 java 文件的 java 文件。

此时我忽略了明显的安全问题,但代码如下:

private boolean isTheFileIamLookingFor(String name,String path,String nameOfFatherClass) {
        System.out.println("NAME IS "+name); //prints correct class name
        System.out.println("PATH IS "+path); //prints correct path
        if(Files.getFileExtension(path).equals("class"))
        {
            try {
                ClassLoader classLoader = this.getClass().getClassLoader();
                Class<?> loadedMyClass = classLoader.loadClass(String.format("%s.class", name));
                Class<?> c[] = loadedMyClass.getInterfaces();
                if(Arrays.asList(c).contains(Class.forName(nameOfFatherClass)))
                {
                    return true;
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return false;

    }

但我得到了错误

java.lang.ClassNotFoundException: MyClass.class

但事实是文件就在那里。 关于为什么找不到课程的任何想法?

【问题讨论】:

    标签: java gwt classloader


    【解决方案1】:

    导入 java.util.Arrays; 导入 org.apache.commons.io.FilenameUtils;

    公共类 mytest {

    public static void main(String[] args) {
        mytest m = new mytest();
        System.out.println(m.isTheFileIamLookingFor("ArrayList", "java.util.",
                "List"));
    }
    
    public boolean isTheFileIamLookingFor(String name, String path,
            String nameOfFatherClass) {
        System.out.println("NAME IS " + name); // prints correct class name
        System.out.println("PATH IS " + path); // prints correct path
        if (!FilenameUtils.getExtension(path).equals("class"))
    
        {
            try {
                ClassLoader classLoader = this.getClass().getClassLoader();
                System.out.println(String.format("%s.class", name));
                Class<?> loadedMyClass = classLoader.loadClass(path + name);
                Class<?> c[] = loadedMyClass.getInterfaces();
                if (Arrays.asList(c).contains(
                        Class.forName(path + nameOfFatherClass))) {
                    return true;
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return false;
    
    }
    

    }

    【讨论】:

    • 所以路径应该像“my.package.folder”。和名称没有扩展名的名称? nameOfFatherClass 和 name 都应该有 .class 文件?好像很接近了,但是问题还是出现了
    • 你还有问题Artur吗?
    • 不,问题是我将路径作为 c:/my/fullpath/ 传递,而不是使用带有 '.' 的相对路径作为分隔符
    猜你喜欢
    • 2020-01-11
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2012-06-21
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多