Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2443 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  RMI en Java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

RMI en Java

n°1332829
marc90
Posté le 27-03-2006 à 13:44:27  profilanswer
 

Bonjour
 
J'ai charger un exemple de RMI en java.
 
Il est composé de 4 fichier java: CountRmiImpl.java   CountRmiServer.java
CountRmiClient.java   CountRmi.java  
 
javac *.java fonctionne bien. Tout est pré-compilé. Je lance java CountRmiServer : il n'y a pas de message d'erreur
Je lance java CountRmiClient, le message: Exception in thread "main" java.rmi.NotBoundException: CountRmi1
   <<No stacktrace available>>
 
apparait.
 
Je précises être sous linux et avoir aussi lancer: rmiregistry &
Avec le message: WARNING: could not properly read security provider files:
         file:///usr/lib/security/libgcj.security
         file:///usr/lib/security/classpath.security
         Falling back to standard GNU security provider
 
 

mood
Publicité
Posté le 27-03-2006 à 13:44:27  profilanswer
 

n°1335226
rnoizet
Posté le 30-03-2006 à 06:41:51  profilanswer
 

Le message n'est pas très clair mais il est possible que le "bind" ait foiré, et donc qu'il n'y ait pas de port associé au serveur...
Note qu'il est possible de faire le "bind" directement dans ton programme, c'est plus propre qu'en appelant "rmiregistry" à côté :

Code :
  1. java.rmi.Naming.bind(...)
 

n°1344735
marc90
Posté le 12-04-2006 à 09:35:24  profilanswer
 

Sur google il y'a qu'une page qui parle de cette erreur et y'a pas d'explication.

n°1348361
marc90
Posté le 17-04-2006 à 21:45:44  profilanswer
 

La classe ici presente permet d'afficher un echiquier ainsi que de gerer les clique de souris et le deplacements des pieces.
Ma question est: doit-elle être au niveau du serveur, au niveau du client ou alors couper avec une partie en serveur et l'autre sur le client?
 
L'objectif étant de pouvoir avoir le même echiquier sur 2 clients differents.
 
J'ai bien essayer de transferer d'un client a l autre le tableau tabEchiquier qui permet la gestion des positions des pièces sur l'echiquier
mais le problème est que la mise à jour ne se fait pas.  
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class Plateau extends JPanel implements MouseListener, MouseMotionListener{
 
 private JeuEchec jeu;
 private Graphics g;
 private ImageIcon imIcon;
 private Image im;
 private Pieces p;
 
 private Pieces [][] tabEchiquier;
 private Dimension dimFenetre;
 private int longPlt;
 private int largPlt;
 private int piece;
 private int valueX, valueY;
 private int lngCase;
 private int lrgCase;
 private String obj;
 private MouseEvent evt;
 private int initX, initY;
 private int passTour;
 
 //Constructeur de la classe Plateau
 public Plateau(JeuEchec j){
  super();
  setVisible(true);
  repaint();
  this.jeu = j;
  tabEchiquier = new Pieces[8][8];
  //this.InitPlateau();
  this.addMouseListener(this);
  passTour = 1;//Forcer le joueur blanc à jouer en premier
 }
 
 //Initialisation du plateau
 public void  InitPlateau(){
  for(int i=0;i<8;i++){
   for(int j=0;j<8;j++){
    tabEchiquier[i][j]=null;
   }
  }
  passTour=1;
  //Pieces(coordX,coordY,couleur, plateau)
  tabEchiquier[0][0]=new Tour(0,0,1,this);
  tabEchiquier[1][0]=new Cavalier(1,0,1,this);
  tabEchiquier[2][0]=new Fou(2,0,1,this);
  tabEchiquier[3][0]=new Reine(3,0,1,this);
  tabEchiquier[4][0]=new Roi(4,0,1,this);
  tabEchiquier[5][0]=new Fou(5,0,1,this);
  tabEchiquier[6][0]=new Cavalier(6,0,1,this);
  tabEchiquier[7][0]=new Tour(7,0,1,this);
  tabEchiquier[0][1]=new Pion(0,1,1,this);
  tabEchiquier[1][1]=new Pion(1,1,1,this);
  tabEchiquier[2][1]=new Pion(2,1,1,this);
  tabEchiquier[3][1]=new Pion(3,1,1,this);
  tabEchiquier[4][1]=new Pion(4,1,1,this);
  tabEchiquier[5][1]=new Pion(5,1,1,this);
  tabEchiquier[6][1]=new Pion(6,1,1,this);
  tabEchiquier[7][1]=new Pion(7,1,1,this);
  tabEchiquier[0][6]=new Pion(0,6,2,this);
  tabEchiquier[1][6]=new Pion(1,6,2,this);
  tabEchiquier[2][6]=new Pion(2,6,2,this);
  tabEchiquier[3][6]=new Pion(3,6,2,this);
  tabEchiquier[4][6]=new Pion(4,6,2,this);
  tabEchiquier[5][6]=new Pion(5,6,2,this);
  tabEchiquier[6][6]=new Pion(6,6,2,this);
  tabEchiquier[7][6]=new Pion(7,6,2,this);
  tabEchiquier[0][7]=new Tour(0,7,2,this);
  tabEchiquier[1][7]=new Cavalier(1,7,2,this);
  tabEchiquier[2][7]=new Fou(2,7,2,this);
  tabEchiquier[3][7]=new Roi(3,7,2,this);
  tabEchiquier[4][7]=new Reine(4,7,2,this);
  tabEchiquier[5][7]=new Fou(5,7,2,this);
  tabEchiquier[6][7]=new Cavalier(6,7,2,this);
  tabEchiquier[7][7]=new Tour(7,7,2,this);
 }
 
 public Pieces[][] getTabEchiquier(){
  return tabEchiquier;
 }
 
 public void setTabEchiquier(Pieces tabEchiq[][]){
  for(int i=0;i<8;i++){
   for(int j=0;j<8;j++){  
    tabEchiquier[i][j] = tabEchiq[i][j];
   }
  }
 }
 
 public int getPassTour(){
 System.out.println("verif getPasstour: "+passTour);
  return passTour;
 }
 
 public void mouseExited(MouseEvent e){
 }
 
 public void mouseClicked(MouseEvent e){
 }
 
 public void mouseEntered(MouseEvent e){
 }
 
 public void mouseMoved(MouseEvent e){
 }
 
 public void mouseDragged(MouseEvent e){
 }
 
 public void mousePressed(MouseEvent e){
  int x;
  int y;
  x = e.getX()/lrgCase;
  y = e.getY()/lngCase;
 
  System.out.println("Bonjour" + " "+ x + " " + y + " " + piece);
  this.valueX = x;
  this.valueY = y;
  if(x<8 && y<8){
     p = tabEchiquier[x][y];
   tabEchiquier[x][y]=null;
   initX = x;
   initY = y;
  }else{
   p=null;
  }
 }
 
 //Action de la souris
 public void mouseReleased(MouseEvent e){
  int x;
  int y;
  x = e.getX()/lrgCase;
  y = e.getY()/lngCase;
  System.out.println("Terminer" + " "+ x + " " + y + " " + piece);
  if(x<8 && x>=0 && y<8 && y>=0){
   p.setFin(x,y);
   if(p.deplacer()==true){
    tabEchiquier[x][y] = p;
    p.setInit(x,y);
    if(passTour==1){
     passTour=2;
    }else{
     passTour=1;
    }
    System.out.println("Valeur du tour "+passTour);
   }else{
    tabEchiquier[valueX][valueY]=p;
   }
   repaint();
  }else{
   System.out.println("Vous etes con ou quoi de mettre la piece en dehors de l echiquier" );
   tabEchiquier[initX][initY]=p;
  }
 }
 
 //Affichage du plateau
 public void paint(Graphics g){
  int longCase;  
  int largCase;
  int longEch;
  int largEch;
 
  super.paint(g);
  dimFenetre = getSize();
  largEch = dimFenetre.height;
  longEch = dimFenetre.width;
  largEch = largEch-largEch/15;
  longEch = longEch-longEch/15;
  largPlt = largEch;
  longPlt = longEch;
  largCase = largEch/8;
  longCase = longEch/8;
  lrgCase = largCase;
  lngCase = longCase;
  CaseEchec [][] c = new CaseEchec[8][8];
   
  for(int i=0; i<8; i++){
   for(int j=0; j<8; j++){
    if(i%2 == 0){
     if(j%2 == 0){
      c[i][j] = new CaseEchec(i*largCase, j*longCase,largCase,longCase, 0, this);
      c[i][j].paint(g);
     }else{
      c[i][j] = new CaseEchec(i*largCase, j*longCase, largCase, longCase,1, this);
      c[i][j].paint(g);
     }
    }else{
     if(j%2 == 0){
      c[i][j] = new CaseEchec(i*largCase, j*longCase, largCase, longCase, 1, this);
      c[i][j].paint(g);
     }else{
      c[i][j] = new CaseEchec(i*largCase, j*longCase, largCase, longCase, 0, this);
      c[i][j].paint(g);
     }
    }repaint();
   }  
 }
  for(int i=0;i<8;i++){
   for(int j=0;j<8;j++){
    if(tabEchiquier[i][j]!=null){
     im = tabEchiquier[i][j].iPiece;
     g.drawImage(im,i*largCase,j*longCase,largCase,longCase,this);
    }
    repaint();
   }
   }
  }
 }

Message cité 1 fois
Message édité par marc90 le 17-04-2006 à 21:57:18
n°1348372
marc90
Posté le 17-04-2006 à 21:59:52  profilanswer
 

Precision: la classe Plateau est pour l'instant appellée par une classe Jeu qui est un JFrame et qui contient des boutons menus qui eux aussi devront se trouver sur les 2 clients.

n°1348512
brasseld
Posté le 18-04-2006 à 08:36:03  profilanswer
 

marc90 a écrit :


Ma question est: doit-elle être au niveau du serveur, au niveau du client ou alors couper avec une partie en serveur et l'autre sur le client?


 
Le serveur "collecte" les informations du jeu. C'est lui qui s'occupe du core du jeu. C'est à lui de gérer l'ensemble des déplacement de pions, d'enlever les pions adéquats...
 
Le client ne fait qu'afficher l'état du plateau et interragit avec celui-ci.
 
En fait, lorsque le client détecte un clic de souris sur une des cases, il faut qu'il envoie un message au serveur pour dire : "j'ai bougé tel pion, qui est parti de telle case pour aller jusqu'à telle case". De là, le serveur, une fois le message reçu, change l'état des cases (uniquement celles où ça doit-être le cas) en conséquence.
 
Une fois que le serveur a mis à jour les cases, il envoie un message au client pour les prévenir que des cases ont été mis à jour : "La case en x/y a changé d'état, ainsi que celle en x2/y2, remets-les à jour graphiquement."
 
Finalement, on peut dire, que le client ne fait qu'afficher le plateau et envoie les messages de mise à jour.
Le serveur gére le core du jeu et envoie les messages à l'ensemble des client pour qu'il mette à jour leur plateau graphique.

n°1348514
marc90
Posté le 18-04-2006 à 08:43:04  profilanswer
 

Daccord merci pour cette réponse tant attendue.
Donc la fonction paint() ainsi que le JFRame avec les boutons du menu doit_être au niveau du client.
Et donc le serveur lui stock le tableau representant les position de piece ainsi que la facon dont peuvent bouger les pieces. Donc la classe ci dessus va devoir etre decoupée :-(
 
Les fichiers gifs représentant les pieces doivent-ils être sur le client ou doivent-ils être récupérer depuis le serveur?


Message édité par marc90 le 18-04-2006 à 10:33:12

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  RMI en Java

 

Sujets relatifs
[JAVA] RMI : Le serveur peut-il exécuter une fonction cliente ?transfere de fichier en java rmi
[Java][RMI] RMISecurityManager[Java][RMI] Connection refused to host
problème avec RMI en java: HELP!RMI java en C/C++ ?
[JAVA] RMI impossible d'accès sur une autre machine[Java-RMI-Oracle] Passer un objet OracleDataSource
[Java ] - RMI et les MAJ d'objets[JAVA][RMI] erreur bizarre avec un serveur rmi
Plus de sujets relatifs à : RMI en Java


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)