bonjour,
voila, j'ai fait des classes qui convertissent des données en provenances de bases de données vers XML accompagné d'un langage script de mon cru...
ces classes font appel a des classes qui sont specifiques a chaque application (derivant de classe abstract)...
quand j'utilise mon loader, ca charge nickel et j'utilise sans probleme les methodes de la classe abstraite.
Voila, la gueule de la classe abstraite:
Code :
- import java.util.*;
- public abstract class CDataBuilder implements SimuPlug,Comparator
- {
-
- public abstract Vector getFieldsList();
- public abstract Vector getConstructorFields();
- public abstract void initCData(Vector v);
- }
|
La classe créée a partir de cette classe abstraite s'appelle CData et se trouve dans un répertoire a part...
Le code de mon classloader est le suivant (simple mais efficace, j'ai pas besoin de plus pour l'instant mais est-il complet???).
Code :
- import java.io.*;
- import java.util.*;
- public class CFileClassLoader extends ClassLoader
- {
- private Hashtable classes = new Hashtable();
- protected String classAccessPath;
- protected File fileClass;
- protected String className;
-
- public CFileClassLoader(String classN,String classAccess)
- {
- classAccessPath = classAccess;
- fileClass = new File(classAccessPath);
- className = classN;
- }
-
- public Class getClassFromFile()
- {
- Class clas;
- long fileSize = fileClass.length();
- byte data[] = new byte[(int)fileSize];
- try
- {
- FileInputStream fIn = new FileInputStream(fileClass);
- fIn.read(data);
- fIn.close();
- clas = defineClass( className, data, 0, data.length );
- resolveClass(clas);
- classes.put(className,clas);
- }
- catch (Exception e)
- {
- clas = null;
- System.out.println("Could not load class - " + e);
- }
-
- return clas;
- }
-
- }
|
Le code d'appel (classe COpenSimu) est le suivant:
Code :
- CFileClassLoader clData = new CFileClassLoader("CData",lastOpenPath + "\\CData.class" );
- classData = clData.getClassFromFile();
-
- try
- {
- Class.forName("CData",true,clData);
- cdb = (CDataBuilder)(classData.newInstance());
- }
|
et après ca appelle une classe commune qui elle fait appel a CData.
et la ca merde a la compil (a priori c'est normal), il me dit ne trouve pas le fichier CData.class...
d'ou vient le probleme? est-ce que ce que je veux faire est possible?
ps: ce que je veux faire en gros, c'est avoir quelques classes communes et 2 classes variables (CData et CSpecifique) chargées dynamiquement
Message édité par djok_fb le 11-02-2003 à 16:57:35