[Résolu] Pb de cast à partir d'un Object

Pb de cast à partir d'un Object [Résolu] - Java - Programmation

Marsh Posté le 27-03-2004 à 13:53:00    

Bonjour,
 
Donc, comme indiqué dans le titre, j'ai un ptit problème de cast :( .
 
Je vous explique ca plus en détails :
     [:k-surf] J'ai un client qui envoie à un serveur un objet de la classe UneMiniatureServeur et ce, par l'intermédiaire d'un ObjectOutputStream.
     [:k-surf] De son coté le serveur lit l'Object envoyé grâce à un ObjectInputStream, et jusqu'à là, pas de problème :ange: .
     [:k-surf] Par contre, au moment ou je souhaite faire 'caster' l'Object recu vers un objet de type UneMiniatureServeur et bah là ... il me renvoie une ClassCastException dans ma tronche :cry:. Et j'ai essayé la même opération en remplaçant les UneMiniatureServeur par des String tout bête, ça marche impec.
 
Code coté client :

Code :
  1. saSocketConnexion = new Socket( "127.0.0.1", 4000) ;
  2. sonFluxSortie = new ObjectOutputStream( saSocketConnexion.getOutputStream() );
  3. sonFluxEntree = new ObjectInputStream( saSocketConnexion.getInputStream() );
  4. UneMiniatureServeur laMiniature = telTableauMiniatures[leI] ;
  5. sonFluxSortie.writeObject(laMiniature) ;


 
Code coté serveur :

Code :
  1. sonFluxSortie = new ObjectOutputStream( saSocket.getOutputStream() );
  2. sonFluxEntree = new ObjectInputStream( saSocket.getInputStream() );
  3. Object lObjet = sonFluxEntree.readObject() ;
  4. UneMiniatureServeur laMiniature = (UneMiniatureServeur)lObjet ;


 
Ca plante donc au moment du cast, la dernière instruction du serveur.
 
 
voili voilou, si quelqu'un avait le temps et le courage de bien vouloir m'aider, ce serait bien sympathique :p  
 
merci d'avance :jap:


Message édité par HannibAlBundie le 28-03-2004 à 18:22:35
Reply

Marsh Posté le 27-03-2004 à 13:53:00   

Reply

Marsh Posté le 27-03-2004 à 17:22:17    

J'ai eu des problèmes aussi avec les streams via des sockets. Par contre je me rappele plus dequels exactement mais je viens de jeter un oeil à mon code.
 
Et en gros, y a deux problèmes, deux bugs référencés :
 
- http://developer.java.sun.com/deve [...] 26188.html
- http://developer.java.sun.com/deve [...] 65324.html
 
Le premier précise qu'il faut récupérer le OutputStream avant le InputStream sur la socket. C'est ce que tu fais.
 
Le second, je sais plus exactement ce que c'est mais à cause de lui, dans mon code j'ai un  

Code :
  1. outputStream.reset();


placé systématiquement AVANT de faire un readObject() sur l'outputStream.
 
J'espère que ca pourra t'aider :)
 
Sinon, est-ce que t'as penser à afficher la classe de l'objet iObjet pour voir ce que tu récupérais ?
 
 


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
Reply

Marsh Posté le 28-03-2004 à 14:45:05    

Non, malheureusement, ce n'est pas ce bug qui est en cause :( .
 
Par contre, ta réponse est quand même utile puisqu'elle répond au problème de etheriel (cf. ici).
 
Merci quand même pour ton aide :jap:  
 
Si quelqu'un à d'autres idées, qu'il n'hésite surtout pas à me les faire partager. Merci :hello:

Reply

Marsh Posté le 28-03-2004 à 15:01:49    

Bon, tant pis. Je vais lui proposer la solution alors (même si c'est un peu tard)
 
T'as affiché le type de l'objet que tu récupérais pour voir ce que ca donne ?
 
 
Avec un truc du style :  
 

Code :
  1. System.out.println(lObjet.getClass().getName());



---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
Reply

Marsh Posté le 28-03-2004 à 18:21:43    

Non bah en fait c'était un conflit bizarre avec une autre partie du programme :sweat:.
 
après moult triturage le cast a donc finit par marcher :p.
 
désoler de t'avoir embetté pour un truc auquel tu ne pouvais pas trouver de solution :pfff:.
 
en tout cas, merci quand meme de ton intéret :jap:.

Reply

Marsh Posté le 28-03-2004 à 18:24:01    

Y a pas de mal :)
 
En tout cas c'est bien que ca marche :)


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed