java.awt.AWTEventMulticaster.mouseExited(未知来源)

时间:2014-02-22 15:13:56

标签: java swing mouselistener

所以我正在尝试实现一个猜测和检查游戏,其中显示了英文字母的字母,然后每次点击一个字母,如果它不是指定单词的一部分就会消失。 (我猜你可以称之为刽子手,但会有更多的东西)。然后一旦游戏丢失,再次调用setLetters并将所有字母重置回屏幕。 (这是我在这里没有解决的另一个问题,并且知道属于更新和setLetters())

letters = new JLabel[26];

for (int i = 0; i < 26; i++) {
    int ch = 'A' + i;
    letters[i] = new JLabel("" + (char) ch);
    panel.add(letters[i],c);
}
ctrl.setLetters(letters);

在ctrl类中有

public void setLetters(JLabel[] letters2) {
    letterLabel = letters2;
    for (int i = 0; i < letters2.length; i++) {
        letterLabel[i].addMouseListener(this); 
/* i'm assuming this issue is here with adding tons of mouselisteners to the label each time it resets, but i'm not sure how to fix it */
    }
}

@Override
public void mousePressed(MouseEvent e) {

    for (int i = 0; i < 26; i++) {
        if (e.getSource() == letterLabel[i]) {
            if    (!game.letterAvailable((letterLabel[i].getText().charAt(0)))){
                letterLabel[i].setText(" ");
            }
            else {
                game.makeGuess((letterLabel[i].getText().charAt(0)));
            }
        }

    }

    update();
}

public void update() {
    if (letterLabel != null) {
        setLetters(letterLabel);
    }
    if (panel != null) { // redraw (not important for this error)
        panel.repaint();
    };
}

我得到的错误是指数式的:

java.awt.AWTEventMulticaster.mouseExited(未知来源)或 java.awt.AWTEventMulticaster.mouseExited(未知来源)

取决于单击字母的方式(尚未找出原因)

1 个答案:

答案 0 :(得分:0)

如HoverCraftFullOfEeels的this answer所述

  

不要将相同的侦听器添加到其侦听器代码中的组件。

mousePressed你正在调用update(),调用setLetter,这会为该组件添加一个监听器。

看起来你将不得不做一些重构。如果没有完全理解你想要完成的任务,就无法真正帮助你。