Bonjour à tous,
J'ai 2 applications Client/Serveur (donc 2 projets sous eclipse) qui communiquent via Socket TCP/IP.
Je n'arrive pas à transmettre un objet via le Socket. L'application Client parvient à écrire l'objet dans le Socket, mais l'application Serveur n'arrive pas à lire l'objet reçu.
L'application Client : TabletRemoteControl.java
L'application Serveur : XroidMediaPlayer.java
La classe qui envoi l'objet :JobWriter.java
La classe qui reçoit l'objet : JobReader.java
L'objet : XroidJob.java
Nota : La classe qui définit l'objet figure dans les 2 projets.
Mes questions :
- Pourquoi eclipse me dit qu'il ne trouve pas l'objet XroidJob alors qu'il figure bien dans chaque projet ?
- Pourquoi eclipse cherche la classe XroidJob dans com.jBidouille.Tablet.Communication.Job.XroidJob alors qu'on se trouve dans le projet côté serveur (donc Xroid) ?
Merci d'avance pour vos lumières.
Voici le LogCat côté Serveur (XroidMediaPlayer.java):
Voici la classe côté Client (Tablet) qui envoi l'objet XroidJob (JobWriter.java) :
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
28
29
30
31
32
33
34
35
36
37 I/DEBUG(224): [Xroid] <WAIT> JobReader attend l.arrivée d.un nouveau Job W/System.err(224): java.lang.ClassNotFoundException: com.jBidouille.Tablet.Communication.Job.XroidJob W/System.err(224): at java.lang.Class.classForName(Native Method) W/System.err(224): at java.lang.Class.forName(Class.java:237) W/System.err(224): at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2604) W/System.err(224): at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1860) W/System.err(224): at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:840) W/System.err(224): at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2080) W/System.err(224): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:943) W/System.err(224): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2299) W/System.err(224): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2254) W/System.err(224): at com.jBidouille.Xroid.Communication.Job.JobReader.run(JobReader.java:64) W/System.err(224): at java.lang.Thread.run(Thread.java:1096) W/System.err(224): Caused by: java.lang.NoClassDefFoundError: com.jBidouille.Tablet.Communication.Job.XroidJob W/System.err(224): ... 11 more W/System.err(224): Caused by: java.lang.ClassNotFoundException: com.jBidouille.Tablet.Communication.Job.XroidJob in loader dalvik.system.PathClassLoader@44c07938 W/System.err(224): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) W/System.err(224): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) W/System.err(224): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) W/System.err(224): ... 11 more I/DEBUG(224): [Xroid] <WAIT> JobReader attend l.arrivée d.un nouveau Job W/System.err(224): java.io.OptionalDataException W/System.err(224): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:966) W/System.err(224): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2299) W/System.err(224): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2254) W/System.err(224): at com.jBidouille.Xroid.Communication.Job.JobReader.run(JobReader.java:64) W/System.err(224): at java.lang.Thread.run(Thread.java:1096) I/DEBUG(224): [Xroid] <ERR> JobReader détecte que Tablet n.écoute plus sur InputStream mais ne lève pas d.événement I/DEBUG(224): [Xroid] <WAIT> JobReader attend l.arrivée d.un nouveau Job W/System.err(224): java.io.OptionalDataException W/System.err(224): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:966) W/System.err(224): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2299) W/System.err(224): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2254) W/System.err(224): at com.jBidouille.Xroid.Communication.Job.JobReader.run(JobReader.java:64) W/System.err(224): at java.lang.Thread.run(Thread.java:1096) I/DEBUG(224): [Xroid] <ERR> JobReader détecte que Tablet n.écoute plus sur InputStream mais ne lève pas d.événement I/DEBUG(224): [Xroid] <WAIT> JobReader attend l.arrivée d.un nouveau Job
Voici la classe côté Serveur (Xroid) qui récupère l'objet XroidJob (JobReader.java) :
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 package com.jBidouille.Tablet.Communication.Job; import java.io.IOException; import java.io.ObjectOutputStream; public class JobWriter implements Runnable{ private ObjectOutputStream outputStream; private XroidJob writerMessage; private Boolean isMessageReady = false; private volatile Thread currentThread = null; public JobWriter(ObjectOutputStream out) { this.outputStream = out; } public void doStop(){ currentThread.interrupt(); } public void setMessage (XroidJob job){ if (job != null) { writerMessage = job; this.isMessageReady = true; } } public void run() { currentThread = Thread.currentThread(); try{ while(!currentThread.isInterrupted()){ if (this.isMessageReady){ try { outputStream.writeObject(writerMessage); outputStream.flush(); } catch (IOException e) { e.printStackTrace(); } this.isMessageReady = false; } Thread.sleep(1000); } } catch (InterruptedException e){ e.printStackTrace(); } try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
Le fameux objet côté Serveur (Xroid) :
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 package com.jBidouille.Xroid.Communication.Job; import java.io.IOException; import java.io.ObjectInputStream; import android.util.Log; public class JobReader implements Runnable{ ObjectInputStream inputStream; private XroidJob readerMessage; private volatile Thread currentThread = null; public JobReader(ObjectInputStream in){ this.inputStream = in; } public void doStop(){ currentThread.interrupt(); } public void run() { currentThread = Thread.currentThread(); try{ while(!currentThread.isInterrupted()){ try { Log.i("DEBUG", "[Xroid] <WAIT> JobReader attend l'arrivée d'un nouveau Job"); readerMessage = (XroidJob)inputStream.readObject(); Log.i("DEBUG", "[Xroid] JobReader a reçu le Job ID " + readerMessage.getJobID()); } catch (IOException e) { e.printStackTrace(); Log.i("DEBUG", "[Xroid] <ERR> JobReader détecte que Tablet n'écoute plus sur InputStream mais ne lève pas d'événement"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Thread.sleep(1000); } } catch (InterruptedException e){ e.printStackTrace(); } try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
Le fameux objet côté Client (Tablet) :
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 package com.jBidouille.Xroid.Communication.Job; import java.io.Serializable; import java.util.UUID; public class XroidJob implements Serializable{ private String jobID; private int[] playList; private Boolean isRandom; private Boolean isLooping; public XroidJob(){ jobID = UUID.randomUUID().toString(); } ... }
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 package com.jBidouille.Tablet.Communication.Job; import java.io.Serializable; import java.util.UUID; public class XroidJob implements Serializable{ private String jobID; private int[] playList; private Boolean isRandom; private Boolean isLooping; public XroidJob(){ jobID = UUID.randomUUID().toString(); } ... }
Partager