这不是第一次单独执行代码的部分,我无法理解原因。我已经运行了调试器,然后它似乎又回到了随机的代码行。
在这种情况下,它会完成MouseAdapter
中的所有代码,但后来又回到if(boundaryIndex==1)...
- 甚至不是if(me.getSource()==backBtn)
- 并且它会重复执行以下代码,直到boundaryIndex
等于1
,然后代码结束。
MouseAdapter ma =
new MouseAdapter()
{
...
public void mouseClicked(MouseEvent me)
{
...
if(me.getSource()==backBtn) // this statement is called repeatedly.
{
if(boundaryIndex==1)
{
backBtn.setIcon(backDisabled);
for(MouseListener l : backBtn.getMouseListeners())
backBtn.removeMouseListener(l);
}
boundaryIndex--;
restoreBackground();
try{
for (int b : map.territories.get(boundaryIndex).getBorders())
img.getGraphics().drawImage(
blueIco,
map.territories.get(b).getPoint().x - blueIco.getWidth() / 2,
map.territories.get(b).getPoint().y - blueIco.getHeight() / 2,
null);
} catch(Exception e) {}
img.getGraphics().drawImage(
redIco,
map.territories.get(boundaryIndex).getPoint().x - redIco.getWidth() / 2,
map.territories.get(boundaryIndex).getPoint().y - redIco.getHeight() / 2,
null);
background.repaint();
}
...
}
};
我希望我能更好地解释这一点,但我不理解它。它违背了我所知道的关于Java的一切。没有循环,它真的,实际上,认真地,跳转到一行代码。它很棒。它从if语句的INSIDE开始,并且在第一次运行后甚至不检查if语句。它从字面上开始就在它的中间。
答案 0 :(得分:0)
我在for循环中添加了鼠标监听器。事实证明,组件被多次给予相同的鼠标监听器。问题解决了。