Je développe une applet MonProg qui interagit avec 2 plugins (pour simplifier) nommés plugin1 et plugin2
Ces plugins ne sont pas utilisés par la majorité des utilisateurs, c'est pourquoi je ne souhaiterai les charger que nécessaire.
Le fichier HTML décrivant mon applet ressemble à ça :
Code :
- <html>
- <body>
- <applet
- codebase="/java"
- archive=MonProg.jar
- code=com.noldor.MonProg width=500 height=300>
- </applet>
- </body>
- </html>
|
J'ai trouvé une solution qui marche à moitié :
dans le fichier manifest, je fais pas référence à plugin1 et plugin2 dans le Class-path:
Code :
- Main-Class: com.noldor.MonProg
- Class-path: plugin1.jar plugin2.jar
|
Lorsque l'utilisateur veut utiliser le plugin2, je charge "paresseusement" la classe :
Code :
- Class x = Class.forName("com.plugins.Plugin2" );
- Constructor[] cons = x.getConstructors();
- cons[0].newInstance(null);
|
cela fonctionne bien à une nuance près : le classloader de l'applet va chercher dans l'ordre des archives du classpath donné dans le fichier manifest. Résultat, lorsque j'instancie Plugin2, il me charge plugin1.jar puis plugin2.jar
J'aimerais biensur qu'il ne me charge que plugin2.jar
Est-ce faisable ?
J'ai pensé à utiliser une URLClassLoader, mais c'est impossible d'instancier un nouveau CLassLoader dans une applet sans signer son applet (ce que j'aimerais éviter).
---------------
http://runnerstats.net