Domanda

Se eseguo un'applet Java firmata, posso caricare classi aggiuntive da fonti remote (nello stesso dominio, magari anche nello stesso host) ed eseguirle?

Mi piacerebbe farlo senza cambiare pagina o addirittura fermare l'applet corrente.Naturalmente, la dimensione totale di tutte le classi è troppo grande per caricarle tutte in una volta.

C'è un modo per fare questo?Ed esiste un modo per farlo con le applet firmate e preservarne lo stato di "confidenza"?

È stato utile?

Soluzione

Penso che le lezioni siano caricate pigramente nelle applet.essere caricato su richiesta.

Ad ogni modo, se le classi sono esterne a un jar puoi semplicemente utilizzare il classloader dell'applet e caricarle per nome.Ex:

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

Se vuoi caricare classi da un jar, penso che dovrai creare una nuova istanza di URLClassLoader con gli URL dei 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");

Per impostazione predefinita, agli applet non è consentito creare nuovi classloader.Ma se firmi la tua applet e includi l'autorizzazione per creare nuovi classloader puoi farlo.

Altri suggerimenti

Sì, puoi aprire connessioni URL all'host da cui hai eseguito l'applet.Puoi creare un classloader con URL HTTP oppure scaricare le classi (come jar) sul computer dell'utente e creare un classloader con quei jar nel classpath.L'applet non si fermerà e non sarà necessario caricare un'altra pagina.

Per quanto riguarda la seconda parte della tua domanda sulla sicurezza, una volta che l'utente ha concesso l'accesso alla tua applet può scaricare qualsiasi cosa, sì, qualsiasi cosa, voglia sul computer locale.Probabilmente puoi informare l'utente su cosa sta facendo, se la progettazione dell'interfaccia utente lo consente.

Spero che questo ti aiuti.

Sembra che dovrebbe essere possibile (ma non l'ho mai fatto).Hai già dato un'occhiata a Remote Method Invocation (RMI)?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top