Bonjour,
J'arrive bien à instancier ma classe dynamiquement. Dans celle ci j'ai une connexion via un socket. J'aimerais remonter dans la classe mère le résultat du thread avec le socket (les données reçues). Avez-vous une idée?
Merci
Version imprimable
Bonjour,
J'arrive bien à instancier ma classe dynamiquement. Dans celle ci j'ai une connexion via un socket. J'aimerais remonter dans la classe mère le résultat du thread avec le socket (les données reçues). Avez-vous une idée?
Merci
En donnant un instance de la classe mère a son thread?
J'ai déjà essayé mais le problème est que la classe instanciée dynamiquement ne reconnait pas les méthodes de la classe mère.
Hum.
Il va falloir un exemple un peu plus concret.
Voici la méthode de ma classe mère qui instancie dynamiquement mon jar:
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 public static void load_Jars (){ <div style="margin-left:40px">Server _server = new Server(); JarFile jarFile = null; File file = new File("C:/Chemin d'accès du jar.jar"); URLClassLoader clazzLoader = null; <div style="margin-left:40px">try { clazzLoader = URLClassLoader.newInstance(new URL[]{file.toURI().toURL()}); } catch (MalformedURLException e2) { e2.printStackTrace(); }</div> <div style="margin-left:40px">try { jarFile = new JarFile(file); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }</div> Enumeration<JarEntry> entries = jarFile.entries(); while (entries.hasMoreElements()) { <div style="margin-left:40px">JarEntry element = entries.nextElement(); if (element.getName().endsWith(".class")) { try { Class c = clazzLoader.loadClass(element.getName().replaceAll(".class", "").replaceAll("/", ".")); if(c.getName().equals("FM_Automate")){ Constructor constr = c.getConstructor(String.class); Server.o = constr.newInstance(_message, event); Server.method = c.getMethod("Item_Action",String.class);</div> } } catch (Exception e) { e.printStackTrace(); } } }</div> }
Et voici ma classe instanciée dynamiquement:
En fait j'aimerai faire remonter ma donnée "message" de mon jar instancié dynamiquement jusque dans ma classe mère.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 public class FM_Automate{ <div style="margin-left:40px">static String socketPort, message; private static ServerSocket socketserverB; private static Socket socketB; static Boolean etatsocket; public static Class _server;</div> public String getMessage () { <div style="margin-left:40px">return message;</div> } public FM_Automate (String _message){ <div style="margin-left:40px">message = _message; try { <div style="margin-left:40px">socketB = new Socket("192.168.0.1",2010); new ReceptionSrvFMAuto (socketB, this); etatsocket = socketB.isConnected();</div> } catch (UnknownHostException e) { <div style="margin-left:40px">// TODO Auto-generated catch block e.printStackTrace();</div> } catch (IOException e) { <div style="margin-left:40px">// TODO Auto-generated catch block e.printStackTrace();</div> }</div> } public void Item_Action (String _message){ <div style="margin-left:40px">message = _message; try { <div style="margin-left:40px">PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socketB.getOutputStream())), true); out.println(message); out.flush();</div> } catch (UnknownHostException e) { <div style="margin-left:40px">// TODO Auto-generated catch block e.printStackTrace();</div> } catch (IOException e) { <div style="margin-left:40px">// TODO Auto-generated catch block e.printStackTrace();</div> }</div> } synchronized public static void getReceivedData (String message){ <div style="margin-left:40px">System.out.println("message: "+message);</div> }
Personne n'a d'idée pour m'aider???
Tu pourrais ajouter une petite fonction dans la classe fille genre public void setClasseMere(ClasseMere c).
Cette fonction permettrait de sauver la classe mere et, apres instanciation, il suffirait la passer...
Merci hwoarang ta méthode fonctionne. :)
C'est ce que je proposait dés le départ en fait :roll:
Désolé wax78 je n'avais pas bien compris mais merci quand même ;)