jeudi 20 juin 2019

Loading .class files via URLClassLoader - NoClassDefFoundError

I'm aware this question has been asked multiple times (such as here), but none of the answers appear to work for me. This is a homework assignment, I'm supposed to "hack" several class files via the reflection API, but I can't even get them to load.

There are three .class files (Inscription.class, Decoder.class, Safe.class) I put in D:\class\. Then I try to load them via an 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
    }

I also tried to load the files one by one, but apparently this shouldn't work, since URLClassLoader only accepts directories or JAR files:

   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.


My classpath configuration looks like this:

enter image description here

Is this a configuration issue?





Aucun commentaire:

Enregistrer un commentaire