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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> загрузка класса и вызов его методов 
:(
    Опции темы
alder
Дата 26.5.2006, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



необходимо загрузить класс и вызвать его метод

чтобы все ето проделать делаю следующее:

Код

final String className = "test.XReportData";
Class newClass = null;
newClass = Class.forName(className); // загрузил сам класс
Method method = newClass.getMethod("getReportName", new Class[0]); // полчаю нужный мне метод
Object o = method.invoke(null, null); // вызываю метод 
System.out.println("value: " + o); // вывод результата


все замечательно работает, НО только если вызываемый метод статичный (в данном случае getReportName)

для того чтобы вызвать не статичный метод я так понимаю нужно вызвать метод newInstance() который на выходе дает Object а как у него вызвать нужный мне метод???? или Как можно вызвать не статичный метод??? 
PM MAIL   Вверх
skhilkov
Дата 26.5.2006, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 Пробуй   newInstance(), просто приведи Object к классу,которому тебе надо, тогда вызывай методы, какие нужно.   


--------------------
Кто понял жизнь, тот не спешит. 
PM MAIL   Вверх
alder
Дата 26.5.2006, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо 
PM MAIL   Вверх
allex
Дата 26.5.2006, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А если className заранее неизвестен и привести к нему не получится, тогда надо передать результат newInstance первым параметром в invoke. Второй параметр invoke - массив параметров вызываемого метода. 
PM MAIL   Вверх
alder
Дата 26.5.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ситуция сейчас такая, из локального приложения загружаю класс вызываю нужный метод и все работает на отлично, если то же самое проделываю из веб приложения то вылетает ексепшн

java.lang.reflect.InvocationTargetException

как мне кажется оно вылетает иза того что могут быть не подключены некоторые jar-ники, но проверил подключил все что необходимо... изза чего еще может вылетать такой ексепшн???

добавлю что он вылетает при вызове метода invoke

Код

ClassLoader loader3 = URLClassLoader.newInstance(new URL[] { new File(jarPath).toURL() });
        Class newClass3 = Class.forName(classImpl, true, loader3);
        mav.addObject("newClass", newClass3.toString());
        Method method3 = newClass3.getMethod("getProjects", new Class[0]);
        mav.addObject("method", method3.toString());
        Object instance3 = newClass3.newInstance();
        try {
            Vector col = (Vector)method3.invoke(instance3, null); // вызываю метод
            mav.addObject("col", col);
        } catch (Exception e) {
            System.out.println("Exception " + e.toString());
        }



Добавлено @ 11:52 
почитал ex.getCause() 
это выдало следующее:
java.lang.NoClassDefFoundError: org/ras/scmstat/client/ServiceAccess

ServiceAccess — это класс через который я осуществляю доступ к ыеб службе, он у меня входит в то самое веб приложение в которм я загружаю класс... почему он его не видит?? и как его можно подключить... 
PM MAIL   Вверх
alder
Дата 26.5.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



разобрался, как мне подсказали надо было сделать еще вот ето: В URLClassLoader.newInstance надо было передать родительский загручик вторым аргументом. Хотя бы this.getClass().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.0670 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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