为什么此打印行命令执行两次?
我有下面的代码。为什么此打印行命令执行两次?
这一切正常,但恼人的是,while
循环中的打印行命令运行两次。有(我已经测试过),只有队列中的唯一项目,没有重复。
public void paint(Graphics g) {
boolean isParent;
int drawCount = 1;
int x = 0, y = 0, width = 0, height = 0;
Color colour;
while (!qtreeQueue.empty()) {
drawNode = (QuadTreeNode) qtreeQueue.deque();
isParent = drawNode.getIsParent();
if (!isParent) {
x = drawNode.getRectangle().x;
y = drawNode.getRectangle().y;
width = drawNode.getRectangle().width;
height = drawNode.getRectangle().height;
colour = getRectangleColour(drawNode);
System.out.println(drawCount + ". Drawing: x = " + x + "; y = " + y +
"; width = " + width + "; height = " + height +
"; colour = " + colour.toString());
minMax(drawNode);
g.setColor(colour);
g.fillRect(x, y, width, height);
drawCount++;
}
}
System.out.println("Minimum level of tree: " + min + "\nMaximum level: " + max);
}
感谢帮助。
这意味着paint
方法被调用两次,这是非常正常的。系统可以根据需要多次调用paint
,因此您不应该执行任何可能会在该方法中更改程序状态的操作。
你会如何建议我打印出来的信息? – Alex 2011-03-05 15:13:42
@AlexW:'paint'意味着*只*刷新屏幕的内容。您应该使用单独的方法执行所有更新和其他操作('deque','println'等),并在实际数据发生变化时调用它。无论何时需要重新绘制屏幕的一部分,系统都可以调用“绘画”,例如。如果窗口最大化或移动。 – casablanca 2011-03-05 15:16:54
但是如果我从paint调用一个方法来做到这一点,它会做两次吗?顺便说一下,这只发生在深度首次搜索。广度优先不重复。 – Alex 2011-03-05 15:26:58
qtreeQueue从哪个类?它是你自己的课程之一吗?我想到的唯一两件事情是它的'empty()'方法有问题,或者'paint'连续快速调用两次。后者可能是这种情况,如果队列总是在油漆前填满。 – 2011-03-05 15:13:46
是的,我没有看到paint()被调用两次,但我想它一定是。 – Alex 2011-03-05 15:15:50
任何事件都会触发'repaint()',这是我所知道的。 – Alex 2011-03-05 15:17:37