Java 通过URLClassLoader加载.class文件-NoClassDefFoundError

Java 通过URLClassLoader加载.class文件-NoClassDefFoundError,java,intellij-idea,reflection,Java,Intellij Idea,Reflection,我知道这个问题已经被问了很多次了(比如),但是没有一个答案对我有用。 这是一个家庭作业,我应该通过反射API“破解”几个类文件,但我甚至无法加载它们 我在D:\class\中放入了三个.class文件(edinting.class、Decoder.class、Safe.class)。然后我尝试通过URLClassLoader加载它们: public void Load() throws MalformedURLException { ClassLoader loader = t

我知道这个问题已经被问了很多次了(比如),但是没有一个答案对我有用。 这是一个家庭作业,我应该通过反射API“破解”几个类文件,但我甚至无法加载它们

我在
D:\class\
中放入了三个
.class
文件(edinting.class、Decoder.class、Safe.class)。然后我尝试通过URLClassLoader加载它们:

 public void Load() throws MalformedURLException {
        ClassLoader loader = this.getClass().getClassLoader();
        File classFolder = new File("D://class//");
        // classFolder.exists() returns true at this point.

        URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{classFolder.toURI().toURL()},loader);

        // urlClassLoader.classes is empty at this point, which is suspicous

         urlClassLoader.loadClass("Safe");
         // throws NoClassDefFoundError (wrong name: ea_6_1/Safe)
         // Interestingly, it seems to find a package name (ea_6_1)

         urlClassLoader.loadClass("ea_6_1.Safe");
         // throws ClassNotFoundException
    }
我还尝试一个接一个地加载文件,但显然这不起作用,因为URLClassLoader只接受目录或JAR文件:

   URL inscription = loader.getResource("Inscription.class");
   URL safe = loader.getResource("Safe.class");
   URL decoder = loader.getResource("Decoder.class");

   URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{inscription, safe, decoder});

   // Exact same behavior as above.

我的类路径配置如下所示:


这是配置问题还是我使用的URLClassLoader错误?是否有其他加载类文件的方法?

似乎有人移动了.class文件,但没有保留所需的目录结构


包ea_6_1声明的Java类
必须位于名为
ea_6_1
的目录中(至少在我所知道的每个Java实现中)。

您似乎已经移动了.class文件,但没有保留所需的目录结构。一个编译过的Java类,其源代码是用
包ea_6_1声明的
必须位于名为
ea_6_1
@VGR的目录中谢谢,我几分钟前发现了同样的情况。这些文件是提供的,周围没有目录结构。如果你把你的评论作为回答,我会接受的。