Проблема перемещения нескольких шаров с RMI? - PullRequest
0 голосов
/ 17 октября 2010

Я работаю над распределенной анимацией перемещения ШАРОВ с помощью RMI.

Моя цель состоит в том, чтобы перемещать несколько шариков таким образом, чтобы несколько клиентов наблюдали одно и то же движение / положение шариков, используя объект-шарик, который является удаленным объектом.

Мяч движется нормально, когда он только один, но когда я пытаюсь увеличить количество шаров, я терплю неудачу.

Вот некоторые фрагменты кода, где я применил циклы для работы с несколькими шарами:

на сервере:

  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.");
    }

на сайте клиента:

вот как я смотрю на удаленные шары:

 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();    

код движущихся шаров:

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();
            }
        }
    }

и это код чертежа:

 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();
        }

    }
}

Может кто-нибудь подсказать мне, почему я вижу только один движущийся шарик, что насчет других шариков или есть какая-то проблема в этой конструкции, и я неправильно использую RMI? или порекомендуйте мне какой-нибудь дизайн, с помощью которого я смогу достичь своей цели.

спасибо большое,

jibby

1 Ответ

0 голосов
/ 17 октября 2010

Похоже, вы связываете все свои шары под одним именем. Вам нужно дать им разные имена, например:

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.");
}

Тогда, когда ищите их, используйте это:

 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...