Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
11 / 11 / 0
Регистрация: 13.10.2012
Сообщений: 163

Запуска приложения реализующего динамическую загрузку классов в терминале

22.09.2014, 10:17. Показов 887. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приложение представляет плагино-модульную архитектуру. То есть во время работы выполняется динамическая загрузка классов. Для этого используется пользовательский загрузчик классов расширяющий ClassLoader.

Суть проблемы такова, что в среде Eclipse приложение удается запускать, в то время как в терминале (ubuntu) при использовании следующей строчки кода (где катало "m/" указывает на расположение модулей *.class):
Java
1
java -jar ModularApp.jar m/
Я получаю следующее сообщение:
Кликните здесь для просмотра всего текста
10:07:24,085 DEBUG main CModuleLoader:findClass:39 - Run of the System Classloader.
Exception in thread "main" java.lang.reflect.InvocationTargetExcept ion
at sun.reflect.NativeMethodAccessorImpl.inv oke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.inv oke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl .invoke(DelegatingMethodAccessorImpl.jav a:43)
at java.lang.reflect.Method.invoke(Method.j ava:606)
at org.eclipse.jdt.internal.jarinjarloader. JarRsrcLoader.main(JarRsrcLoader.java:58 )
Caused by: java.lang.NoClassDefFoundError: ru/intetech/module/CModule
at java.lang.ClassLoader.defineClass1(Nativ e Method)
at java.lang.ClassLoader.defineClass(ClassL oader.java:800)
at java.lang.ClassLoader.defineClass(ClassL oader.java:643)
at ru.intetech.moduleloader.CModuleLoader.f indClass(CModuleLoader.java:35)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:425)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:358)
at ru.intetech.modularApp.Main.main(Main.ja va:42)
... 5 more
Caused by: java.lang.ClassNotFoundException: ru.intetech.module.CModule
at java.lang.ClassLoader.findClass(ClassLoa der.java:531)
at ru.intetech.moduleloader.CModuleLoader.f indClass(CModuleLoader.java:40)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:425)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:358)
... 12 more


Вот фрагмент кода, класса пользовательского загрузчика (расширяющего ClassLoader), где возникает ошибка:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    protected Class<?> findClass(String className) throws ClassNotFoundException
    {
        try
        {
            //получение байт-кода из файла и загрузка класса в рантайм.
            byte b[]=getClassAsBytes(m_pathToBin+className+".class");
            return (defineClass(className, b, 0, b.length));
        }
        catch(FileNotFoundException ex)
        {
            m_log.debug("Run of the System Classloader.");
            return (super.findClass(className));
        }
        catch(IOException ex)
        {
            m_log.debug("Run of the Bootstrap.");
            return (super.findClass(className));
        }
    }


В чем может крыться проблема? JRE не может вызвать один из загрузчиков классов... ?

P.S. Загрузик реализовывал на основе данной статьи: http://habrahabr.ru/post/104229/
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2014, 10:17
Ответы с готовыми решениями:

Разработка приложения реализующего задачу перебора с возвратом
Задание для курсовой: Разработка приложения реализующего задачу перебора с возвратом. Не могу сообразить что к чему. И как правильно...

Пытаюсь сделать динамическую загрузку dll. Dll-библиотека не подает признаков жизни
Здравствуйте. У меня такое дело, я пытаюсь создать в своей программе динамическую загрузку dll-библиотеки: type TApple = procedure; ...

Запуск приложения в терминале
Всем привет! Разрабатываю приложение под Андроид. Как запустить приложение apk в Андроид терминале. Пробую вот так, но пишет ...

3
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
22.09.2014, 20:31
Цитата Сообщение от yol Посмотреть сообщение
Caused by: java.lang.ClassNotFoundException: ru.intetech.module.CModule
вот на что Вам стоит обратить внимание.
скорее всего Вы не правильно подключаете модуль и поэтому java его не видит - ClassNotFoundException
Цитата Сообщение от yol Посмотреть сообщение
Суть проблемы такова, что в среде Eclipse приложение удается запускать
ему удается потому-что он лепит все правильно.
Посмотрите на командную строку, которую запускает Eclipse и добавьте опции, которые добавляет Eclipse себе
0
11 / 11 / 0
Регистрация: 13.10.2012
Сообщений: 163
23.09.2014, 08:46  [ТС]
Цитата Сообщение от animator404 Посмотреть сообщение
скорее всего Вы не правильно подключаете модуль и поэтому java его не видит - ClassNotFoundException
Я попробовал залогировать то место, где появляется ошибка. Оказывается дело в том, что загрузчик после попытки загрузить модуль, пытается загрузить класс интерфейса, который модуль расширяет.
Кликните здесь для просмотра всего текста

Добавленная строка кода:
Java
1
2
3
4
//... 
m_log.debug("#Path: "+m_pathToBin+className+".class");          
byte b[]=getClassAsBytes(m_pathToBin+className+".class"); 
//...
Сообщение во время выполнения:
15:55:39,634 DEBUG main Main:main:36 - Load file: CModulePrinter2.class
15:55:39,637 DEBUG main CModuleLoader:findClass:34 - #Path: m/CModulePrinter2.class
15:55:39,637 DEBUG main CModuleLoader:findClass:34 - #Path: m/ru.intetech.module.CModule.class
15:55:39,638 DEBUG main CModuleLoader:findClass:40 - Run of the System Classloader.


Цитата Сообщение от animator404 Посмотреть сообщение
Посмотрите на командную строку, которую запускает Eclipse и добавьте опции, которые добавляет Eclipse себе
Как посмотреть? Если Вы про: Выполнить как --> Выполнить Configuration --> вкладка Arguments. То там все поля пустые.
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
23.09.2014, 09:56
yol, я не пользуюсь эклипсом и не могу сказать как в нем посмотреть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.09.2014, 09:56
Помогаю со студенческими работами здесь

Скрипт запуска приложения
Всем привет! Передо мной стоит следующая задача... Есть приложение, написанное под Windows, которое я хочу запустить на VPS-сервере с ОС...

Блокировка запуска приложения
Приветствую. Есть надобность блокировать запуск программы на Win xp, 7. А точнее есть приложение &quot;A&quot; которое запускается при...

Порядок запуска приложения
Уважаемые форумчане, объясните пожалуйста почему конструкторы форм приложения выполняются по порядку: Application-&gt;Initialize(); ...

Параметры запуска приложения
решил написать mp3 плеер и столкнулся с такой проблемой: я задал ассоциацию с файлами mp3. по 1 файлу плеер прекрасно открывает, но если...

Ошибка запуска приложения
до сегодня все работало хорошо, ява попросила апдейт, я поставил, с этого момента minecraft перестал запускаться, при этом сервер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru