2010-10-16 4 views
0

Je travaille sur une animation distribuée de BALLS en mouvement avec RMI.Problème lors du déplacement de plusieurs balles avec RMI?

Mon but est de déplacer plusieurs balles d'une manière, de sorte que plusieurs clients observent le même mouvement/la position des balles, en utilisant un objet balle qui est un objet distant.

La balle bouge bien, quand elle n'en est qu'une, mais quand j'essaie d'augmenter le nombre de balles, je suis défaillante.

voici quelques extraits de code où j'ai appliqué des boucles de travailler pour plusieurs balles:

sur le serveur:

b[0] = new BallImpl(0, 50, 2, 3 ,Color.YELLOW,20); 
    b[1] = new BallImpl(50, 50, 4, 3,Color.BLUE,10); 
    b[2] = new BallImpl(40, 40, 5, 5, Color.PINK,30); 
    b[3] = new BallImpl(60, 70, 4, 6, Color.GREEN,40); 

    for (int i = 0; i < currentNumBalls; i++) { 

     Naming.rebind ("rmi://localhost/BouncingBall", b[i]); // registers Ball object 
     System.out.println ("remote ball object registered."); 
    } 

sur le site client:

que la façon dont je regarde pour des boules à distance:

for (int i = 0; i < currentNumBalls; i++) { 
     try { 
      this.aBall[i] = (Ball) Naming.lookup("rmi://localhost/BouncingBall"); 

     } catch (Exception e) { 
      System.out.println("Exception: " + e); 
     } 
    } 
    start();  

mouvement des thats code balles:

public void moveballs() { 

     for (int i = 0; i < currentNumBalls; i++) { 
      try { 

       aBall[i].setBounds(pit.getWidth(), pit.getHeight()); 
       aBall[i].move(); 

       pit.repaint(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

et c'est le code de dessin:

public void drawballs(Graphics g) { 

    for (int i = 0; i < currentNumBalls; i++) { 
     try { 

      g.setColor(aBall[i].getColor()); 
      g.fillOval(aBall[i].getX(), aBall[i].getY(), aBall[i].getradius(), aBall[i].getradius()); 

     } catch (RemoteException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

Quelqu'un peut-il s'il vous plaît me guider pourquoi je ne vois qu'une balle en mouvement, qu'en d'autres balles ou il y a un problème dans cette conception et im en utilisant le RMI de mauvaise façon? ou recommandez-moi une conception par laquelle je peux accomplir mon but.

merci beaucoup,

Jibby

Répondre

0

Il semble que vous liez toutes vos boules sous le même nom. Vous devez leur donner des noms différents, comme ceci:

for (int i = 0; i < currentNumBalls; i++) { 

    Naming.rebind ("rmi://localhost/BouncingBall"+i, b[i]); //add index to the name 
    System.out.println ("remote ball object registered."); 
} 

Puis, quand les regardant, utilisez ceci:

for (int i = 0; i < currentNumBalls; i++) { 
    try { 
     this.aBall[i] = (Ball) Naming.lookup("rmi://localhost/BouncingBall"+i); 

    } catch (Exception e) { 
     System.out.println("Exception: " + e); 
    } 
} 
+0

ah, mon hypothèse était fausse, et je pensais que ce ne est pas la manière efficace, peut Pensez à tout autre moyen d'accomplir cette tâche. –

Questions connexes