Bonjour !

J'ai un problème assez compliqué à expliquer au chargement d'une classe contenue dans un fichier jar, je vais essayer d'être clair quand même...

J'ai un projet qui définit une classe GenericPlugin (Qui contient les méthodes minimales de tous les plugins de ce projet)...

J'ai un second projet (qui contient les classes necessaires à mon plugin de test) qui définit une classe systeme.Main qui hérite de GenericPlugin...

Jusque là tout va bien je crée ensuite un jar de mon plugin en précisant la main-class dans le manifest.

ça se complique dans mon premier projet quand je veux récupérer mon plugin... je cherche les jar d'un répertoire, quand j'en trouve un, je lis le manifest, je récupère la main class et je la charge avec le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
JarFile fichierJar = new JarFile(fichier);
Manifest manifest = fichierJar.getManifest();
Attributes attributes = manifest.getMainAttributes();
if(attributes.containsKey(Attributes.Name.MAIN_CLASS)){
    String mainClass = attributes.getValue(Attributes.Name.MAIN_CLASS);
    URL urlList[] = {fichier.toURL()}; 
    ClassLoader loader = new URLClassLoader(urlList); 
    Class classe = Class.forName(mainClass,true,loader);
    Method[] methodes = classe.getMethods();
    for (int j = 0;j<methodes.length;j++){
	System.out.println(methodes[j].getName());
    }
}
System.out.println(classe.getSuperclass());
Quand j'exécute de code, je me retrouve avec la trace suivante dans la console :

main
hashCode
getClass
wait
wait
wait
equals
notify
notifyAll
toString
class java.lang.Object

bref, ma classe mère GenericPlugin a disparue (Vu que ma superclass est class java.lang.Object), les méthodes de ma classe plugin ont également disparues....

mon fichier manifest est comme ça :

Manifest-Version: 1.0
Created-By: 1.4.2_08 (Sun Microsystems Inc.)
Main-Class: systeme.Main

Et la classe de mon plugin (J'ai décompilé la classe qui était dans le jar qui est lu par l'autre projet)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
package systeme;
import java.awt.MenuItem;
import java.io.PrintStream;
import plugin.GenericPlugin;
 
public class Main extends GenericPlugin
{
 
    public Main()
    {
    }
 
    public MenuItem getMenu()
    {
        return null;
    }
 
    public void afficher()
    {
        System.out.println("Chronoz");
    }
 
    public void zzz()
    {
        System.out.println("Chronoz");
    }
}
les methodes afficher() et getMenu() sont les méthodes abstraites de la classe GenericPlugin, les autres sont définies ici

voilà si quelqu'un a une idée de piste, parceque là, je sèche un peu

Merci d'avance