Pergunta

Se eu estiver executando um miniaplicativo Java assinado, posso carregar classes adicionais de fontes remotas (no mesmo domínio, talvez até no mesmo host) e executá-las?

Eu gostaria de fazer isso sem alterar as páginas ou mesmo interromper o miniaplicativo atual.Obviamente, o tamanho total de todas as classes é muito grande para carregá-las todas de uma vez.

Existe uma maneira de fazer isso?E existe uma maneira de fazer isso com miniaplicativos assinados e preservar seu status de "confiança"?

Foi útil?

Solução

Acho que as aulas são carregadas lentamente em miniaplicativos.sendo carregado sob demanda.

De qualquer forma, se as classes estiverem fora de um jar você pode simplesmente usar o carregador de classe do applet e carregá-las por nome.Ex:

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

Se você quiser carregar classes de um jar, acho que precisará criar uma nova instância de URLClassLoader com os URLs do(s) jar(s).

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

Por padrão, os applets são proibidos de criar novos carregadores de classe.Mas se você assinar seu miniaplicativo e incluir permissão para criar novos carregadores de classe, você poderá fazê-lo.

Outras dicas

Sim, você pode abrir conexões de URL com o host a partir do qual executou seu miniaplicativo.Você pode criar um carregador de classe com URLs HTTP ou baixar as classes (como jars) para a máquina do usuário e criar um carregador de classe com esses jars no caminho de classe.O miniaplicativo não para e você não precisa carregar outra página.

Em relação à segunda parte da sua pergunta sobre confiança, uma vez que o usuário tenha concedido acesso ao seu miniaplicativo, ele poderá baixar qualquer coisa, sim, qualquer coisa que desejar para a máquina local.Você provavelmente pode informar o usuário sobre o que ele está fazendo, se o design da interface do usuário permitir isso.

Espero que isto ajude.

Parece que deveria ser possível (mas nunca fiz isso).Você já deu uma olhada em Invocação de Método Remoto (RMI)?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top