ClassLoader maison et Unload de DLL
Bonjour à tous,
Je suis en train de me créer mon propre loader et j'ai des difficultés au niveau du defineClass. Je récupère bien mon fichier.class dans un tableau de bytes par la méthode loadClassData :
Code:
1 2 3 4 5
|
...
byte[] b = loadClassData(filename, jarName);
Class myClass = defineClass(className, b, 0, b.length);
return myClass; |
A l'aide du debugger je vois que tous les champs de myClass sont nul et lorsque que je veux faire :
Code:
1 2
|
MaClasse monInstance = (MaClasse) myClass.newInstance(); |
J'ai l'erreur NoClassDefFoundError.
Merci de votre aide.
ClassLoader maison et Unload de DLL
Bonjour, quand je dis "decharger une dll" c'est faire un équivalent de unload comme on pourrais le faire pour charger une dll via la méthode System.load.
J'ai lu sur plusieurs forums que pour décharger une dll il fallait s'intéresser au Garbage Collector et qu'il était donc possible de unloader une dll via initialize du ClassLoader qui crée la classe chargeant la dll.
Seulement voila mon initialize ne marche pas vraiment...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
class MonClassLoader extends ClassLoader {
public MonClassLoader(URL[] urls) {
super(urls);
}
public void finalize() {
super.finalize();
}
}
class MaClasse1 {
private MonClassLoader monClassLoader;
...
public creerClasse2() {
...
// pour charger un JAR
monClassLoader = new MonClassLoader(urls);
MaClasse2 classe2 = (MaClasse2) Class.forName(MaClasse2,
true,
monClassLoader).newInstance;
...
}
...
public libererRessources() {
monClassLoader.initialize();
...
}
}
class MaClasse2 {
private MaClasseDll dllCourante;
...
public initClasse2() {
if(...)
dllCourante = new MaClasseDLL1();
else if(...)
dllCourante = new MaClasseDLL2();
...
else
dllCourante = new MaClasseDLL5();
}
} |
Et donc c'est à l'intérieur de l'une de mes MaClasseDLL# que je vais loader la dll qui m'intéresse en faisant le System.load(...)
Le initialize ne marche donc pas vraiment...Est ce parce que ce n'est pas vraiment MaClasse2 qui va loader la dll ? Est ce que je dois faire plutôt mon ClassLoader pour la classe MaClasseDLL ?
A bientot, Merci !