|
Модераторы: LSD, AntonSaburov |
|
3,14 |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 6 Всего: 24 |
Есть у меня некий Launcher, который запускает основное приложение, подгружая его моим же ClassLoader-ом (AppLoader):
AppLoader является наследником URLCLassLoader-а, и в конструкторе тупо передает ему аргументы. Проблема в следующем, приложение запускается, делаем в нем: App.class.getClassLoader() //подгруженный класс или getClass().getClassLoader() и возвращается системный ClassLoader, а не объявленный мной. Соответственно классы из подключенных Jar-ов он не видит... -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
jk1 |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
А Ваш собственный загрузчик выполняет делегацию к родительскому загрузчику? Есть подозрение, что искомый класс уже загружен родительским CLassLoader'ом, потому Ваш собственный и не пытается его грузить сам.
-------------------- Opinions are like assholes — everybody has one |
|||
|
||||
3,14 |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 6 Всего: 24 |
Выполняет. А как это обойти? Не уж то добавлять загрузку классов еще?
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
jk1 |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Тут есть два принципиально разных способа: 1. Исключить parent delegation для конкретных классов. Работать скорее всего будет, но это похоже на костыль и чревато jar hell 2. Понять, почему system classloader ухитрился загрузить целевой класс первым и сделать так, чтобы этого не происходило. Я бы выбрал второй способ. Если приаттачите побольше исходников я даже смогу указать где именно у Вас проблема. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
3,14 |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 6 Всего: 24 |
Код загрузчика:
К другим файлам проекта Launcher и Loader вроде как не обращаются, так что странно, что загрузка класса App идет. -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
3,14 |
|
||||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 6 Всего: 24 |
Проверил, класс ранее загружен не был, и загружался именно через делегирование при вызове:
В консоль падало: [Loading class: org.mc.main.App], а вот что класс был ранее загружен нет, не падало, тем не менее, когда после загрузки вызывал тип ClassLoader-а, возвращался совсем не мой ClassLoader, а системный:
В консоль валилось: [App ClassLoader is: sun.misc.Launcher$AppClassLoader] а не org.mc.main.AppLoader -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
||||
|
|||||
jk1 |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Раз загружал системный, значит библиотеки оказались в ClassPath. Если их оттуда убрать, то системный загрузить не сможет и мы получим искомое.
-------------------- Opinions are like assholes — everybody has one |
|||
|
||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |