IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Communication d'un Objet par socket


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 5
    Points
    5
    Par défaut Communication d'un Objet par socket
    Bonjour bonjour,

    Aujourd'hui je rencontre un problème pendant la communication d'un objet.
    Je m'explique :
    • Tout d'abord j'ai un objet "Identite" qui est de cette forme : cliquer ici
    • Cet objet se trouve chez le serveur
    • Maintenant je voudrais l'envoyer à mon client, pour cela je fais : cliquer ici
    • Du coté du client je procède ainsi pour récupérer mon objet : cliquer ici

    Le seul problème est que grâce à mes System.out.println(); je vois qu'il reçois bien quelque chose puisque le message "C'est cool" s'affiche.
    Le message "fin de reception s'affiche egalement.
    Je confirme bien que mon objet est de type Identite grâce au .getClass();
    Mais lorsque je tape .getNomPerso(); je récupère un: null

    Ors je devrais avoir un string puisque mon objet que je passe ( coter serveur ) lorsque je fais un .getNomPerso(); me renvois bien son contenu.

    Eclipse ne me renvois aussi aucun message d'erreur de compilation, je ne vois pas d'ou viens le problème.

    Help ^^ !

    Cordialement.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Même en faisant cela je recoit null avec mon System.out.println(test.getnomPerso());

    justement avant j'avais déclarer test en tant qu'instance d'Identite, mais on m'a dit de le faire en tant qu'instance d'Object.

    PS : Je répondais a un post qui me disait de declarer test en tant qu'instance d'Identite en faisant :
    Identite test = (Identite)identiteJoueur1.readObject();

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 609
    Points
    21 609
    Par défaut
    Il manque plein de choses dans la classe Identite. Fais voir.

    Bon, t'es pas obligé de montrer tous les paramètres, ça sert à rien, mais laisser nomPerso et montrer la classe entière, si elle a que nomPerso.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Voici la class Identite.

    désolé de ne pas avoir tout mis mais on m'a déjà reprocher de mettre trop de code, et donc de ne pas me focaliser sur l'essentiel. Alors j'ai mis ce que je pensai de plus important.

    Cliquer ici

  5. #5
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Oula, c'est tres moche ca. Ton probleme est que ta classe Identite declare tous ses attributs comme statiques. C'est à dire commun à toutes les instances de "Identite".
    Autrement dit, si tu crées 2 objets Identite différents, si tu appelles la fonction "getNomPerso" de l'un ou l'autre, tu recupereras le nom du 2e que tu as créé.

    Bref, il faut commencer par enlever tous ces statiques (sur les parametres ET sur les getters).

    En ce qui concerne ton probleme, lorsque tu crées ton objet sur le serveur en lui passant les parametres, il est correctement créé (et tes fonctions fonctionnent). Le probleme, lors de la désérialisation, c'est que ce processus commence par appeler le constructeur sans parametre (comme tu n'en as pas déclaré, il ne fait rien) puis charge ses attributs privés (tu n'en as pas puisque tout est statique). C'est pourquoi tu vois un pointeur null...

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 609
    Points
    21 609
    Par défaut
    Tous tes champs sont static, ils ne sont donc pas dans un objet, et donc il n'y a pas de sérialisation qui tienne.
    Vire static.

    Citation Envoyé par Kiisuk Voir le message
    désolé de ne pas avoir tout mis mais on m'a déjà reprocher de mettre trop de code, et donc de ne pas me focaliser sur l'essentiel.
    Oui oui, je confirme. Je te dis la même chose.

    Citation Envoyé par Kiisuk Voir le message
    Alors j'ai mis ce que je pensai de plus important.
    Ben comme je l'ai déjà dit, montrer un paramètre, "nomPerso", c'est important. Peut-être un ou deux de plus, "classe" et "race" pour illustrer. Mais les 13 autres ça sert à rien, ils sont tous pareils. Bien sûr que c'est pas important.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Allelujah cela fonctionne.

    Merci pour l'explication, je n'avais pas compris exactement cela sur les static.
    Mon objet passe bien le contenus maintenant.


    Mais du coup, lorsque j'essaye de faire ceci : cliquer ici
    Une exception NullPointerException est capturée

    Sachant que ma identiteJoueur1 est déclarer en static a l'interieur de la class Identite.

    Quand les getter et setter étaient en static cela fonctionnait.

    Faut-il que je declare identiteJoueur1 a l'interieur de ma class MenuMJ pour pouvoir la modifier sans avoir a mettre identiteJoueur1 en static ?

    EDIT : donc oui c'etait bien ça, il fallais que je declare une instance d'Identite dans ma class MenuMJ pour pouvoir changer ses attribut.

    Je vous remercie tous, grâce a vous j'ai réussi a faire ce que je voulais, et vous m'avez fait comprendre ce que représentai réellement le modifier static.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. échange d'objets par socket
    Par korkoth dans le forum MFC
    Réponses: 5
    Dernier message: 10/01/2008, 15h30
  2. Problème de communication par socket
    Par odjosc dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 20/06/2006, 14h57
  3. [Omnis] Communication par Socket
    Par y0p dans le forum WinDev
    Réponses: 4
    Dernier message: 15/06/2006, 09h02
  4. Problème de communication par sockets
    Par Linio dans le forum Entrée/Sortie
    Réponses: 33
    Dernier message: 06/05/2006, 18h50
  5. [Socket] Envoi de texte et d'objets par socket
    Par ced dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 05/08/2004, 09h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo