如何停止/限制某些方法的执行(〜已经有一些对象正在调用它)

时间:2010-10-17 14:30:21

标签: java implementation rmi distributed-computing

我陷入困境,我需要以多用户方式移动球,我使用RMI 在移动BALLS的分布式动画中。

我的目标是以某种方式移动多个球,以便多个客户观察球的相同运动/位置,我使用的球对象是远程对象。

我的问题是: 我正在调用移动功能,这是远程的,并且越来越多的客户端导致更频繁地调用该功能并且由于增加no而导致球速度越来越快从不同的客户调用此方法。

有人可以推荐我,我怎么能解决这个问题,当球已经在一个客户端移动时,其他球不会调用该功能但只是利用它。

这是代码:

public void start() {
        Play = true;
        Thread t = new Thread(this);
        t.start();
    }

public void run() {

    while (Play == true) {
        runball();
        pit.repaint();
        try {
            Thread.sleep(50);
        } catch (InterruptedException ie) {
            stop();
        }
    }
}

public void runball() {

    try {
            aBall.setBounds(pit.getWidth(), pit.getHeight());
            aBall.move();
            }

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

并且有我的远程移动方法:

public  void move() throws RemoteException {
        // ... Move the ball at the give velocity.
        m_x += m_velocityX;
        m_y += m_velocityY;

    if (m_x < 0) { // If at or beyond left side
        m_x = 0; // Place against edge and
        m_velocityX = -m_velocityX;

    } else if (m_x > m_rightBound) { // If at or beyond right side
        m_x = m_rightBound; // Place against right edge.
        m_velocityX = -m_velocityX;
    }

    if (m_y < 0) { // if we're at top
        m_y = 1;
        m_velocityY = -m_velocityY;

    } else if (m_y > m_bottomBound) { // if we're at bottom
        m_y = m_bottomBound;
        m_velocityY = -m_velocityY;

    }

}

有人可以指导我,这个设计有一些问题我用错误的方式使用RMI吗?或者推荐一些我可以实现目标的设计。

非常感谢,

jibby

1 个答案:

答案 0 :(得分:0)

我认为你的客户不应该告诉服务器移动球。

相反,应该有一个服务器线程以所需的速率移动球。客户应该只是询问服务器当前球的位置。