загрузка классов Java из подписанного апплета - PullRequest
5 голосов
/ 13 сентября 2008

Если я использую подписанный Java-апплет, могу ли я загрузить дополнительные классы из удаленных источников (в том же домене, может быть, даже на одном хосте) и запустить их?

Я бы хотел сделать это без смены страниц или даже остановки текущего апплета. Конечно, общий размер всех классов слишком велик, чтобы загружать их все сразу.

Есть ли способ сделать это? И есть ли способ сделать это с помощью подписанных апплетов и сохранить их статус «доверия»?

Ответы [ 3 ]

5 голосов
/ 13 сентября 2008

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

В любом случае, если классы находятся за пределами jar, вы можете просто использовать загрузчик классов апплета и загрузить их по имени. Пример:

ClassLoader loader = this.getClass().getClassLoader();
Class clazz = loader.loadClass("acme.AppletAddon");

Если вы хотите загрузить классы из фляги, я думаю, вам нужно будет создать новый экземпляр URLClassLoader с URL-адресом фляг (ов).

URL[] urls = new URL[]{new URL("http://localhost:8080/addon.jar")};
URLClassLoader loader = URLClassLoader.newInstance(urls,this.getClass().getClassLoader());
Class clazz = loader.loadClass("acme.AppletAddon");

По умолчанию апплетам запрещено создавать новые загрузчики классов. Но если вы подпишете свой апплет и включите разрешение на создание новых загрузчиков классов, вы можете это сделать.

2 голосов
/ 14 сентября 2008

Да, вы можете открывать URL-соединения с хостом, с которого вы запускали апплет. Вы можете создать загрузчик классов с HTTP-адресами HTTP или загрузить классы (в виде jar-файлов) на компьютер пользователя и создать загрузчик классов с этими jar-файлами в пути к классам. Апплет не остановится, и вам не нужно загружать другую страницу.

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

Надеюсь, это поможет.

0 голосов
/ 13 сентября 2008

Звучит так, как будто это возможно (но я никогда этого не делал). Вы уже рассматривали удаленный вызов метода ( RMI )?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...