Question

Si j'exécute une applet Java signée, puis-je charger des classes supplémentaires à partir de sources distantes (dans le même domaine, peut-être même sur le même hôte) et les exécuter ?

J'aimerais faire cela sans changer de page ni même arrêter l'applet en cours.Bien entendu, la taille totale de toutes les classes est trop grande pour les charger toutes en même temps.

Y a-t-il un moyen de faire cela?Et existe-t-il un moyen de le faire avec des applets signés et de préserver leur statut de « confiance » ?

Était-ce utile?

La solution

Je pense que les classes sont chargées paresseusement dans les applets.étant chargé à la demande.

Quoi qu'il en soit, si les classes se trouvent en dehors d'un fichier jar, vous pouvez simplement utiliser le chargeur de classes d'applet et les charger par leur nom.Ex:

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

Si vous souhaitez charger des classes à partir d'un pot, je pense que vous devrez créer une nouvelle instance de URLClassLoader avec la ou les URL du ou des pots.

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

Par défaut, il est interdit aux applets de créer de nouveaux chargeurs de classes.Mais si vous signez votre applet et incluez l'autorisation de créer de nouveaux chargeurs de classes, vous pouvez le faire.

Autres conseils

Oui, vous pouvez ouvrir des connexions URL vers l'hôte à partir duquel vous avez exécuté votre applet.Vous pouvez soit créer un chargeur de classe avec des URL HTTP, soit télécharger les classes (sous forme de fichiers JAR) sur la machine de l'utilisateur et créer un chargeur de classe avec ces fichiers JAR dans le chemin de classe.L'applet ne s'arrêtera pas et vous n'aurez pas besoin de charger une autre page.

Concernant la deuxième partie de votre question sur la confiance, une fois que l'utilisateur a accordé l'accès à votre applet, il peut télécharger n'importe quoi, oui n'importe quoi, sur la machine locale.Vous pouvez probablement informer l'utilisateur de ce qu'il fait, si la conception de votre interface utilisateur le permet.

J'espère que cela t'aides.

On dirait que cela devrait être possible (mais je ne l'ai jamais fait).Avez-vous déjà jeté un œil à l'invocation de méthode à distance (IRM)?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top