affichage non rafraichi avant attente d'un socket
bonjour a tous
voila je développe un petit jeu en réseau (jeu du yin-yang, pas très connu mais très intéressant)
j'en suis a envoyé mes coups par le réseau, cela marche très bien mais j'ai un probleme au niveau de l'affichage
chaque joueur fait a tour de rôle office de serveur et de client
un coup se passe de cette manière
1) j1 choisi un coup
2)execution du coup chez j1
des labels, des images sont censés changé sur ma vue
3) envoie du coup a l'autre joueur j2
lorsque l'autre joueur recoit le coup on l'execute, la vue est bien mis a jour chez lui
4)attente chez j1 de reception du coup de l'autre joueur
c'est la que ca doit bloquer, tant qu'on n'a pas recu le coup de l'autre joueur la vue ne se met pas a jour, du coup quand on recoit le coup il fait l'affichage du coup qu'on a envoyer puis l'affichage du coup qu'on vient de recevoir
ce que j'ai essayé pour l'instant:
-faire une pause dans le programme pour que la vue ai le temps de se mettre a jour: Thread.sleep(1000);:ne marche pas
-forcer l'affichage de la jframe
majframe.repaint;:marche pas
voila j'ai plus trop de solution
je vous met un peut de code si ca peut vous aider
merci d'avance pour vos réponse
execution graphique du coup:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| leCoup.executer();
//on maj le label graphique en se servant de l'attribut imageicon du pion
if (leCoup.getCasedepart().estvide())
{
plateauG.get(getindice(leCoup.getCasedepart())).setIcon(ICtransp);
}
else
{
plateauG.get(getindice(leCoup.getCasedepart())).setIcon(leCoup.getCasedepart().getpion(leCoup.getCasedepart().getListpion().size()-1).getImage());
}
plateauG.get(getindice(leCoup.getCasearrive())).setIcon(leCoup.getCasearrive().getpion(leCoup.getCasearrive().getListpion().size()-1).getImage());
if (leCoup.getCasedepart().getNumcase()==1)
{
pionsJ1.setText(String.valueOf(leCoup.getCasedepart().getListpion().size()) + " pions restant");
}
else if (leCoup.getCasedepart().getNumcase()==2)
{
pionsJ2.setText(String.valueOf(leCoup.getCasedepart().getListpion().size()) + " pions restant");
}
txt_historique.setText(txt_historique.getText() + "\n" +leJoueur.getNom()+" -> pion déplacé de la case "+leCoup.getCasedepart().getNumcase()+" à la case "+leCoup.getCasearrive().getNumcase());
leJoueur=autrejoueur();
labelJcourant.setText(leJoueur.getNom()+" A VOUS DE JOUER !"); |
envoie du coup a l'autre joueur
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| try
{
socket = new Socket(leJoueur.getAdresse(), 7776);
// construction de flux objets à partir des flux de la socket
output = new ObjectOutputStream(socket.getOutputStream());
output.writeObject(leCoup);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(this, "la liaison est rompu"+e);
//fermer la partie
} |
attente du coup de l'autre joueur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| labelJcourant.setText("en attente de "+ leJoueur.getNom());
//on fait une pause pour l'affichage des labels
//Thread.sleep(10000);
//this.repai
//on attend le coup de l'autre joueur
serverSocket = new ServerSocket(7776);
//on considère que le joueur a 30s pour jouer
//voir a mettre un timer de son coté
serverSocket.setSoTimeout(30000);
// se met en attente de connexion de la part d'un client distant
socket = serverSocket.accept();
// connexion acceptée : récupère les flux objets pour communiquer
// avec le client qui vient de se connecter
input = new ObjectInputStream(socket.getInputStream());
// attente les données venant du client
leCoup = (coup)input.readObject(); |