URLClassLoader не работает - PullRequest
       10

URLClassLoader не работает

1 голос
/ 23 марта 2011

Я хочу загрузить файл в каталог F: / badge-dao / bin / com / badge / dao / impl / с именем BadgeDaoImpl . Я пишу и тестирую следующий код.

Если я изменю каталог или имя класса, он выдаст исключение. Для следующего кода, который, как я полагаю, должен работать, он не генерирует исключение classNotFoundException, а скорее останавливает его и передает управление блоку finally EventTable.

Подскажите, пожалуйста, где я ошибаюсь.

URL[] urls = {new URL("file:/F:/badge-dao/bin/com/badge/dao/impl/")};

ClassLoader parentClassLoader = project.getClass().getClassLoader();

URLClassLoader classLoader = new URLClassLoader(urls, parentClassLoader);

selectedClass = classLoader.loadClass("BadgeDaoImpl");

1 Ответ

4 голосов
/ 23 марта 2011

Имя пакета является частью полного имени класса, а не элемента classpath, поэтому вам необходимо следующее:

URL[] urls = {new URL("file:/F:/badge-dao/bin")}; 
...
selectedClass = classLoader.loadClass("com.badge.dao.impl.BadgeDaoImpl"); 

В вашем исходном коде загрузчик классов может найти файл с именем BadgeDaoImpl.class в file:/F:/badge-dao/bin/com/badge/dao/impl/,но его полное имя класса (com.badge.dao.impl.BadgeDaoImpl) не соответствует запрошенному (BadgeDaoImpl), поэтому загрузчик классов выдает NoClassDefFoundError.Поскольку вы ловите только ClassNotFoundException, похоже, что управление незаметно переходит к блоку finally.Когда вы изменяете имена папок или классов так, что файл .class не может быть найден, ClassNotFoundException генерируется как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...