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

AWT/Swing Java Discussion :

Envoie d'un JPanel (ObjectInputStream)


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 77
    Points : 49
    Points
    49
    Par défaut Envoie d'un JPanel (ObjectInputStream)
    Bonjour,
    j'ai une application (un jeu) qui doit pouvoir se jouer en reseau , un joueur vivant contre un autre joueur vivant.
    Il faut donc que les joueurs disposent du même plateau de jeu il me semble..
    J'essaie alors d'envoyer le JPanel du serveur au client ainsi :

    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
    package controller;
     
    import java.io.BufferedReader;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
     
    import model.Game;
    import view.Board;
     
    public class Serv implements Runnable {
    	private Socket socket;
    	private ObjectOutputStream output;
    	private ObjectInputStream input;
    	private Game game;
     
    	public Serv(Socket s, Game game) {
    		this.socket = s;
    		this.game = game;
    	}
     
    	public void run() {
    		try {
    			System.out.println("MultiGameS");
    			Board board = game.getGamePanel().getBoard();
    			output = new ObjectOutputStream(socket.getOutputStream());
    			output.writeObject(board);
    			output.flush();
     
    		} catch (Exception e) {
    			System.out.println("erreur");
    			e.printStackTrace();
    		}
    	}
    }
    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
    package controller;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.SocketException;
     
    import model.Game;
    import view.Board;
     
    public class Client implements Runnable {
    	private Socket socket;
    	private ObjectOutputStream output;
    	private ObjectInputStream input;
    	private Game game;
     
    	public Client(Socket s, Game b) {
    		this.socket = s;
    		this.game = b;
    	}
     
    	public void run() {
    		try {
    			input = new ObjectInputStream(socket.getInputStream());
    			try {
    				Board board = (Board) input.readObject();
    				game.getGamePanel().setBoard(board);
    			} catch (ClassNotFoundException e) {
    				e.printStackTrace();
    			}
     
    			game.getGamePanel().getBoard().repaint();
     
    		} catch (SocketException e) {
    			System.out.println("erreur");
    			e.printStackTrace();
    		} catch (IOException ex) {
    			System.err.println("Le client n'est pas connecte");
    		}
    	}
    }
    Ceci est censé fonctionner je pense, cependant le jeu du côté du client est comme "bloqué". Pourtant je n'ai aucune erreur et j'arrive bien à la fin du programme donc je ne comprends pas pourquoi il y'a ce "bloquage".
    merci.

  2. #2
    Membre habitué Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Points : 170
    Points
    170
    Par défaut
    Qu'est-ce que tu entend par "bloqué" ?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 77
    Points : 49
    Points
    49
    Par défaut
    En fait j'ai des éléments sur ce plateau, et il s'avère que du côté du client on ne peut rien faire.
    Ce sont exactement les mêmes board (cote serveur et client), les éléments ont les memes coordonnées sur chaque board, cependant c'est visuellement que rien ne se passe du côté client, les éléments ne se mettent pas à jour meme après un repaint() , et impossible de déplacer les éléments.
    Eclipse ne m'indique aucune erreur (peut il se tromper??)

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Pas sûr du tout que ça soit une bonne idée de transférer des objets graphiques à travers le réseau à chaque rafraichissement...

    Même si tu arrivais à corriger ton souci de refresh, tu aurais à tous les coups de gros soucis de performances, et une faible (très faible) tolérance aux différentes versions qui peuvent (un jour) cohabiter (eg. ton jeu v1.1 ne pourra peut-être pas désérialiser des JPanel de v1.2, obligeant les clients à utiliser strictement la même version de l'interface graphique). Idem pour un utilisateur qui utiliserait Java 5 vs un autre qui utiliserait Java 8, rien ne garantit que la forme sérialisée d'un JPanel est portable d'une version de java à l'autre... (ça fait d'ailleurs partie des warnings qu'on peut lire un peu partout dans la javadoc de swing)

    Enfin bref, pour cette raison et des tas d'autres, je te conseillerais plutôt de définir des objets légers, bien définis et sous ton contrôle, que tu pourras ensuite exposer sous de multiples formes de transport (via http, via échange de flux sérialisés, en xml, en json, etc) et t'offrant par la même occasion un potentiel d'interactions bien plus grand...

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

Discussions similaires

  1. [VB6] [Winsock] Envoi de données
    Par CYFL dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 25/12/2002, 17h49
  2. [Winsock] Envoi et recupération d'une image
    Par arnolanf dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 29/11/2002, 08h49
  3. [Socket]envoie de fichier!!!
    Par SamDaKap dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/11/2002, 08h07
  4. Envoi de Datagrames par IP en JAVA
    Par the java lover dans le forum Développement
    Réponses: 2
    Dernier message: 14/08/2002, 11h44

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