Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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");

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

Другие советы

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

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

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

Похоже, это должно быть возможно (но я никогда этого не делал).Вы уже ознакомились с удаленным вызовом метода (РМИ)?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top