Мне известно, что этот вопрос задавался несколько раз (например, здесь ), но ни один из ответов, похоже, не работает для меня.
Это домашнее задание, я должен «взломать» несколько файлов классов с помощью API отражения, но я даже не могу их загрузить.
Есть три .class
файла (Inscription.class, Decoder.class, Safe.class), которые я вставил в D:\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.
Моя конфигурация classpath выглядит следующим образом:
Это проблема конфигурации или я неправильно использую URLClassLoader? Есть ли другой способ загрузки файлов классов?