Bonjour,
J'essaye depuis un petit moment de développer un truc peut être un peu tordu mais qui me permettrait de faire énormément de choses derrière.
-J'ai un serveur qui attend une connexion, une fois celle-ci établie il envoie un properties au client puis attend un objet.
-J'ai un client qui se connecte à un serveur, demande au client de choisir un jar sur le disque, récupère un fichier de configuration lui correspondant sur le serveur. Instancie ce jar (la classe qui est instancié dans le jar implémente une interface que le serveur ET le client partagent)
1 2 3 4 5 6 7 8 9
| public static ImonObjet loadClass(File file, Properties param) throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException{
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass("MonPackage.MonObjet");
ImonObjet iobj=null;
iobj = (ImonObjet) cls.getConstructors()[0].newInstance(param );
return iobj;
} |
Ce code fonctionne parfaitement cotés client et mon objet est instancié comme il faut et référencé via l'interface qu'elle étend.
Apres ça le client envoie cette objet au serveur via un objectoutputstream et le serveur le récupère donc via objectinputstream.
ImonObjet obj = (ImonObjet ) ois.readObject();
mais j'obtient une exception: classnotfound.
En parlant avec d'autres programmeurs ils me disent que en théorie ça devrait fonctionner mais voila...
Il faut peut être que je charge la classe avant? mais comment vu que e fichier n'est pas sur le serveur (et que j'ai pas vraiment envie de l'y placer).
bref, si quelqu'un a une idée de comment faire sa réponse sera la bienvenue 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| java.lang.ClassNotFoundException: MonPackage.MonObjet
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:266)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:623)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1610)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at serveur.TraitementClient.connection(TraitementClient.java:77)
at serveur.TraitementClient.run(TraitementClient.java:54)
at java.lang.Thread.run(Thread.java:722) |
Partager