Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ClassLoader 
V
    Опции темы
Tony
Дата 17.12.2006, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Нужно организовать загрузку классов из каталога не зная полного названия класса(package). Тоесть есть папка(test) там класс. Путь D:/test/killer/Test.class .

Код

package killer;
public class Test{
    private String name;
    public static void main(String[] args) {
        
    }
      public void eee(){

}

Не как не могу его загрузить. smile . Exception: java.lang.NoClassDefFoundError


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
tux
Дата 17.12.2006, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Честно говоря, совершенно не понял что ты хочешь сделать. Объясни подробнее.
PM MAIL Skype GTalk Jabber YIM   Вверх
Tony
Дата 17.12.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Кароче есть папка там лежат классы в пакетах. Я не знаю какие имена классов. Всё что я могу сделать это рекурсивно прочитать содержимое папок. Тоесть например есть папка test. Там лежат пакет: например killer. Я пробегаю рекурсией узнаюй с помищю file.listFiles(), что там есть какие то классы. Так вот имея путь к файлу например: d:/test/killer/Test.class. Мне нужно его загрузить. Kak загрузить? Постоянно вылитает: java.lang.NoClassDefFoundError


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
shimopus
Дата 17.12.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 25.8.2006

Репутация: 1
Всего: 1



воспользовавшись дефолтным ClassLoader-ом
PM ICQ Skype GTalk   Вверх
LSD
Дата 17.12.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Код
class MyClassLoader extends ClassLoader
{
  public Class loadClass(File file) throws IOException
  {
    DataInputStream in = new DataInputStream(new FileInputStream(file));
    byte[] data = new byte[(int)file.length()];
    in.readFully(data);
    return defineClass(null, data, 0, data.length);
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
tux
Дата 17.12.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Ну откуда же класслоудер знает про эти твои классы? Конечно not found всегда будет. Если у тебя при запуске приложения каталог, где лежат классы известен, то просто можно добавить его в CLASS-PATH. Если нет, то придется реализовывать свой загрузчик классов. В FAQ есть пример как это сделать - http://vingrad.ru/JAVA-ART-002949.
PM MAIL Skype GTalk Jabber YIM   Вверх
Tony
Дата 17.12.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Цитата(LSD @ 17.12.2006,  13:51)
Код
class MyClassLoader extends ClassLoader
{
  public Class loadClass(File file) throws IOException
  {
    DataInputStream in = new DataInputStream(new FileInputStream(file));
    byte[] data = new byte[(int)file.length()];
    in.readFully(data);
    return defineClass(null, data, 0, data.length);
  }
}

Пробывал и свой и твой вариант. Не прокатывает.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 17.12.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Tony @  17.12.2006,  14:32 Найти цитируемый пост)
Пробывал и свой и твой вариант. Не прокатывает.

Что значит "не прокатывает", ошибки или что?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 17.12.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Написал.По не внимательности не работало. Всем большое спасибо.

Это сообщение отредактировал(а) Tony - 17.12.2006, 15:50


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
DOKA
Дата 30.8.2007, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Цитата(LSD @ 17.12.2006,  13:51)
Код
class MyClassLoader extends ClassLoader
{
  public Class loadClass(File file) throws IOException
  {
    DataInputStream in = new DataInputStream(new FileInputStream(file));
    byte[] data = new byte[(int)file.length()];
    in.readFully(data);
    return defineClass(null, data, 0, data.length);
  }
}

А что делать если загружаемый мною класс Class1 является наследованым от моего абстрактного Class2?
При попытке загрузить такой класс мне программа выдаёт ошибку загрузки класса Class2, насмотря на то, что он прикомпилирован к моей программе!
Может его нужно как-то предварительно загрузить в память?

По сути у меня суть - плагины. Есть опубликованый класс Class2 и все, кто хочет написать плагин, наследуются от него и кидают класс в определённую директорию.
PM MAIL   Вверх
kkorsakoff
Дата 30.8.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 14



Значит либо твой лоадер должен знать, откуда и ак загрузить Class2, либо если он не знает, передавай загрузку его родителю. (уж он то знает хоть? smile )
PM MAIL WWW ICQ   Вверх
DOKA
Дата 30.8.2007, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Цитата(kkorsakoff @ 30.8.2007,  10:24)
Значит либо твой лоадер должен знать, откуда и ак загрузить Class2, либо если он не знает, передавай загрузку его родителю. (уж он то знает хоть? smile )

Вот я и спрашиваю, как это сделать?  smile 
PM MAIL   Вверх
DOKA
Дата 1.9.2007, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Вопрос снят.
После прочтения манов по ClassLoader выяснилось, что необходимо создавать этот сласслоадер так:

Код

ClassLoader cl = new MyClassLoader(ParentClass.class.getClassLoader());

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0858 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.