Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
 Аватар для popov654
33 / 33 / 7
Регистрация: 09.04.2011
Сообщений: 119

Динамическая загрузка классов

26.04.2011, 10:58. Показов 3512. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кросплатформенный код, работающий на Java 5/6

В общем есть фрагмент кода (ссылка на веб-сайт), который сильно завязан на Java 6 (то есть под пятой не скомпилится). Я конечно могу определить версию JVM через System.getProperty(), но дело в том, что IDE всё равно подчёркивает часть строк красным. Мне бы хотелось в идеале этого избежать.

Я решил изучить динамическую загрузку классов, но тут же столкнулся с непреодолимыми трудностями. Начало более-менее рабочее, а потом не находит он один класс - и хоть тресни)
Может, кто-нибудь подскажет, в чём ошибка?
Вылетает на том месте, где надо найти класс-перечисление java.awt.Desktop.Action
Причём я сам до конца не понял, что это - сначала думал что вложенный класс - вроде не находит. Вроде бы должен являться полем - но вроде и не поле. Судя по иконке, которую выдаёт NetBeans, всё же класс! Но методом Class.forName() не обнаруживается. Что за ерунда?

Java
1
2
3
4
5
6
7
8
9
10
11
12
try {
     Class desk = Class.forName("java.awt.Desktop");
     Boolean result = (Boolean) desk.getMethod("isDesktopSupported", null).invoke(null, null);
     if (result) {
          Boolean result2 = (Boolean) desk.getMethod("isDesktopSupported", null).invoke(desk.getMethod("getDesktop", null).invoke(null, null), Class.forName("java.awt.Desktop.Action").getField("BROWSE").get(null));
          if (result2) {
              desk.getMethod("browse", URI.class).invoke(desk.getMethod("getDesktop", null).invoke(null, null), new URI("http://popov654.pp.ru/graphbuilder.html"));
          }
     }
} catch (Exception e) {
     e.printStackTrace();
}
Сорри за эти макароны, иначе просто вообще ничего не работало, пришлось написать так...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.04.2011, 10:58
Ответы с готовыми решениями:

Динамическая загрузка классов
Здравствуйте, хотел узнать, в этом коде правильно организована динамическая загрузка класса JFrame: */ public class...

Загрузка классов и инициализация
Ребята, знаком только на самом начальном этапе с джавой. В видео Мирончика были такие слова, если я их правильно понял, что по сути при...

Динамическая загрузка классов
Помогите, пожалуйста: Известен путь к каталогу, где лежит файл с исходным кодом класса или интерфейса, который нужно реализовать, и имя...

10
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
26.04.2011, 12:13
Сделай 2 версии своего класса, для java5 и java6. Для java5 можно использовать это.
0
142 / 105 / 16
Регистрация: 21.04.2011
Сообщений: 402
26.04.2011, 14:34
Не могли бы вы объяснить что за монстра вы пишите?
0
 Аватар для popov654
33 / 33 / 7
Регистрация: 09.04.2011
Сообщений: 119
26.04.2011, 15:44  [ТС]
Э... Сорри, не понял. Идея конечно хорошая, но каким образом среднестатистический юзер будет выбирать нужный класс? Во время установки? Так это придётся здорово заморочиться с инсталлятором, боюсь я так не сумею. Либо чтобы установка сама определяла установленную версию JRE, но это тоже не совсем тривиально. Я например с Wise Installation Studio работаю - Вы бы как это в ней сделали?
Всё равно так или иначе придётся динамическое определение и загрузку класса использовать в самой проге. Или Вы предлагаете свести это к минимуму, выбрав класс на самом старте из двух (это главный модуль)?

Добавлено через 11 минут
Ого, интересная штука...) Возможно, стоит заменить моё обращение к java.awt.Desktop на неё вообще. В этой версии... Это всё равно всего лишь очередная версия, для кроссплатформенного использования. Главное, на что она нацелена - разрулить существующие проблемы с платфомозависимыми разделителями путей, но я решил, что и механизм открытия URL нужно слегка переделать для пущей переноимости

Добавлено через 11 минут
Работает шикарно и там и сям. Большое спасибо)
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
27.04.2011, 10:15
Цитата Сообщение от popov654 Посмотреть сообщение
Идея конечно хорошая, но каким образом среднестатистический юзер будет выбирать нужный класс?
Вообще-то я имел ввиду только то, что "среднестатистический юзер" будет выбирать дистрибутив программы подходящий для его версии jre.
0
 Аватар для popov654
33 / 33 / 7
Регистрация: 09.04.2011
Сообщений: 119
28.04.2011, 03:18  [ТС]
Ну, это сделать просто. Только не очень экономно и рационально. Держать два проекта в WIS, генерироваться будет 4 дистрибутива вместо двух (у меня в настройках выставлено генерировать ещё и инсталлятор на русском языке)... Это в лучшем случае, а в худшем (если дело не ограничится дублированием одного класса) ещё и на жёстком диске два разных каталога с исходниками, скомпилированными классами и прочим добром...

Оффтоп: а у меня и так текущий каталог, периодически загружаемый в Subversion, три релизных ветки (т.е. три версии, которые развиваются параллельно, поскольку до сих пор в первых всплывают всякие баги, порой довольно серьёзные), а в третьем релизе ещё две дополнительных редакции: одна сделана специально для Win98 (читайте для Java 5, с той тонкостью, что сайт открывается с помощью виндовой команды (которая не будет работать на других ОС) и некоторые пути прописаны в коде жёстко через бэкслэш, что фатально для UNIX систем. Ну а вторая редакция исправляет эти досадные упущения, при этом она и под Win98 работает тоже (а почему ей не работать )
Вывод: у меня уже и так две редакции реализовано. Так что ещё одна совершенно ни к чему, тем более что обе работают на JRE 5 и 6, а вторая ещё и с другими ОС совместима.

Так что вопрос вроде решён) Спасибо всем, кто откликнулся)

Добавлено через 7 минут
Кстати, вопрос в догонку: если я захочу (а наверно это так и будет) всё это дело русифицировать (ну или хотя бы последний релиз) - что Вы посоветуете: Internationalize в NetBeans и дальше по стандартной схеме (ключ запуска, либо переключать язык в настройках или как-нибудь так) - или всё-таки делать отдельную редакцию на русском? Ну например чтобы не усложнять код или облегчить вес дистрибутива/пространство, занимаемое прогой на жёстком диске?
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
28.04.2011, 07:37
Цитата Сообщение от popov654 Посмотреть сообщение
Держать два проекта в WIS, генерироваться будет 4 дистрибутива вместо двух
Нафига? Просто при сборке в build.xml в замисимости от, например, ключа не включать в исходники определенные файлы.

В исходниках postgresql-jdbc приблизительно так сделана сборка драйвера для разных версий jdbc.

Добавлено через 2 минуты
Цитата Сообщение от popov654 Посмотреть сообщение
некоторые пути прописаны в коде жёстко через бэкслэш
Используй везде "/" и будет тебе "щасье". Яве пофиг на разделитель, она сама заменяет "/" на системный, когда надо.

Добавлено через 8 минут
Цитата Сообщение от popov654 Посмотреть сообщение
если я захочу (а наверно это так и будет) всё это дело русифицировать
ResourceBundle тебе в помощь
1
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
28.04.2011, 10:22
Цитата Сообщение от popov654 Посмотреть сообщение
Кстати, вопрос в догонку: если я захочу (а наверно это так и будет) всё это дело русифицировать (ну или хотя бы последний релиз) - что Вы посоветуете: Internationalize в NetBeans и дальше по стандартной схеме (ключ запуска, либо переключать язык в настройках или как-нибудь так) - или всё-таки делать отдельную редакцию на русском? Ну например чтобы не усложнять код или облегчить вес дистрибутива/пространство, занимаемое прогой на жёстком диске?
Дополнительный файл свойств займет в сжатом виде килобайт. Это в худшем случае.

1
 Аватар для popov654
33 / 33 / 7
Регистрация: 09.04.2011
Сообщений: 119
28.04.2011, 23:04  [ТС]
Используй везде "/" и будет тебе "щасье". Яве пофиг на разделитель, она сама заменяет "/" на системный, когда надо.
Спасибо, не знал)

Нафига? Просто при сборке в build.xml в замисимости от, например, ключа не включать в исходники определенные файлы.
Вообще-то я имел в виду проекты в Wise Installation Studio, а не в NetBeans IDE
Насчёт build.xml - а чем это проще, чем два проекта в WIS? Я build.xml руками никогда не правлю. Да, некоторые предпочитают править их вручную, но это головная боль почище первой
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
29.04.2011, 05:47
Цитата Сообщение от popov654 Посмотреть сообщение
Насчёт build.xml - а чем это проще, чем два проекта в WIS?
Я никогда не работал с WIS, поэтому ничего сказать не могу.

Цитата Сообщение от popov654 Посмотреть сообщение
Я build.xml руками никогда не правлю
А я всегда создаю их руками, это, на самом деле, не так сложно, как кажется.
0
 Аватар для popov654
33 / 33 / 7
Регистрация: 09.04.2011
Сообщений: 119
29.04.2011, 21:34  [ТС]
Они вроде бы довольно большие... Мне их NetBeans создаёт))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2011, 21:34
Помогаю со студенческими работами здесь

Динамическая загрузка java-класса
Привет, брат ! Пытаюсь загрузить java - класс. Пишу под виндой. Получаю exception 'ClassNotFound'. Вот кусок кода: ...

Загрузка/Выгрузка классов в Java
Здравствуйте. Проконсультируйте меня по такому вопросу: Возможно ли в Java выполнить следующую манипуляцию - мы запускаем приложение. В...

В каком порядке происходит загрузка классов
Добрый день. Пару вопросов: 1. В каком порядке происходит загрузка классов(не по загрузчикам, а по классам)? 2. Загрузка всегда...

Загрузка заставки и ленивый загрузчик классов в свете совета от Хорстманна
Вот кусок из Core Java. Между прочим, revised and updated for Java SE 6 (8 издание). At startup, the class containing your mainmethod...

Динамическая память для классов
Всем здрасьте. Допустим у меня есть класс: class UnrealClass { public: UnrealClass(); UnrealClass(const...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru