У меня есть приложение, которое использует отражение для создания экземпляра кода, сохраненного в некотором каталоге: я создаю URLClassLoader, который затем загружает классы, используя предоставленные URL-адреса;это отлично работаетЯ пытался портировать приложение на апплет.Для загрузки текстовых файлов и изображений я изменил код с использования относительных путей на getResourceAsStream()
, который прекрасно работает.Однако для загрузчика классов у меня все еще есть исключение ввода-вывода (которое я также использовал для получения текстовых файлов и изображений до того, как изменил код для использования потоков):
java.security.AccessControlException: access denied (java.io.FilePermission /.../... read)
Классы вбыть загружены содержатся в файле JAR (как и все другие ресурсы).Есть ли способ загрузить классы, используя что-то вроде getResourceAsStream()
, которое не вызывает исключения безопасности?Обратите внимание: я говорю о загрузчике классов, вызываемом из кода Java, а не загрузчике классов, который загружает апплет.
РЕДАКТИРОВАТЬ: Подробнее о структуре файла / папки:
MyАпплет находится в пакете a, a.MyApplet, который использует класс a.aa.Loader, который предназначен для загрузки классов, хранящихся в другой папке b (следовательно, не загружается при загрузке апплета).Папка b содержит много каталогов, b.c_i, где c_i - уникальный каталог.В каждом из этих каталогов есть классы, которые принадлежат пакету xyz, поэтому общая структура папок b: b.c_i.xyz;z содержит файл для загрузки.Когда я создаю банку, верхний уровень выглядит следующим образом ([] обозначает папку): [a], [b], [data], [images] где [a] = {MyApplet, [aa], [aaa]и т. д.} и [b] = {c_1, _c2, ...} где c_i = {[x]}, [x] = {[y]}, [y] = {[z]} и, наконец, [z] = {Class.class}.Надеюсь, что обозначение не слишком странное.
Edit2: Подробнее.
Чтобы уточнить: классы, которые я хочу загрузить, являются классами других людей, все они помещены в отдельный каталог "DIR" (они не являются частью проекта и не формируют проект сами).Фактически, все эти имена классов идентичны, они хранятся в уникальных каталогах в «DIR».Мне нужно загрузить один файл за раз.Другими словами, я хотел бы относиться к файлам классов как к любому другому ресурсу.
ПРИМЕЧАНИЕ. Я пробовал подписанный апплет, и он больше не выдает исключение безопасности, а IO: он не может найти файл.Я проверил структуру каталогов и перепробовал множество вариантов, все с одинаковым результатом (он работает на моей локальной машине).Я не уверен, действительно ли это проблема ввода-вывода или проблема безопасности.