如何限制Java方法调用仅适用于任何事件的第一次出现?

时间:2013-03-23 17:38:59

标签: java methods invoke

通过让addButton返回一个布尔值(在点击时为true,在没有时为false)做出一个解决方法然后我这样做了:if (addButton) { doSomething(); }

(对不起,标题可能会产生误导。无法弥补更好的头衔)

我得到了这个方法(让我们称之为method1,它也在循环中一直调用),它添加了一个自定义按钮,我希望该按钮(当点击时)运行指定的方法(让我们称之为方法2)只有一次。我希望method1可以在几个不同的类中使用,但是可以触发不同的操作。

public void addButton(Graphics2D g2d, int x, int y, AttributedCharacterIterator atstr, Method method)
{
    BufferedImage img = Sprites.button;

    x -=img.getWidth()/2;
    y -=img.getHeight()/2;
    int border = 10;

    g2d.drawImage(img, null, x, y);
    g2d.drawString(atstr, x + (img.getWidth()/2) - border, y + (img.getHeight()/2) + 10);
    Rectangle getBounds = new Rectangle(x, y, img.getWidth(), img.getHeight());
    if (MouseInput.getBounds().intersects(getBounds) && MouseInput.mouseClickedPressed == true)
    {
        try {
            method.invoke(this);
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

它被称为:

addButton(g2d, 200, 200, Template.atstr(g2d, "Siege!", Color.BLACK, "Times New Roman", 20, doSomething()));
        public Method doSomething()
        {
            //Action.....
            return null;
        }

我的问题是方法2一直被调用,我已经想出了原因,但有什么方法吗?

3 个答案:

答案 0 :(得分:0)

如果你只希望它被调用一次,你需要在第一次调用时设置为boolean invoked的标志/字段true,并防止以后被调用 - 只需写一些if :if(!invoked) { invoke... }

答案 1 :(得分:0)

我试图理解你的代码而失败了...... 但是我相信我可以建议你创建特殊标志(例如buttonClicked)。此变量的值为false

当用户点击按钮时,流程应该到达如下代码:

if (buttonClicked) {
    return;
}
buttonClicked = true;
// do other stuff hrere

请不要忘记同步这段代码。否则,如果用户点击足够快,它可以同时执行。

答案 2 :(得分:0)

基本上你需要一个标志变量,它在方法2运行时设置。检查方法2 if(!flag) method2();