无限绘画Java

时间:2012-12-31 23:07:07

标签: java loops graphics paintcomponent infinite

我开始玩别人的其他代码并遇到了一个有趣的实验。该程序将与if语句一起正常工作。但我发现如果我将if语句更改为while循环,程序会运行,但我无法使用X按钮关闭程序,而是必须按Eclipse终止按钮。我猜这是一个无限循环的标志,还是Java不能反复重复绘制相同的图像呢?

// if you want to draw graphics on the screen, use the paintComponent method
        // it give you a graphic context to draw on
        public void paintComponent(Graphics g){

            super.paintComponent(g);

            // when the player is still in the game
            if(inGame){
                g.drawImage(apple, apple_x, apple_y, this);

                for (int z = 0; z < dots; z++) {
                    if (z == 0)
                        g.drawImage(head, collisionX[z], collisionY[z], this);
                    else g.drawImage(tail, collisionX[z], collisionY[z], this);
                }
                Toolkit.getDefaultToolkit().sync();

                // dispose graphics and redraw new one
                g.dispose();
            }
            else gameOver(g);
        }

3 个答案:

答案 0 :(得分:5)

将此行更改为while语句

if (inGame) {

不允许将变量重置为false,从而导致无限循环。在paintComponent中使用while循环或任何资源繁重的调用通常是一个坏主意。 Swing有concurrency mechanisms来处理这些问题。

答案 1 :(得分:4)

如果您希望UI保持响应,则事件处理程序和重新绘制应在合理的时间内完成。这意味着你根本不应该在paintComponent()内循环;相反,你必须反复触发其他地方的重绘,比如动画计时器。

答案 2 :(得分:2)

if更改为while,即:

while(inGame){
如果inGame为真,

将永远循环,因为只有两种方法可以退出循环:

  • inGame在循环中设置为false
  • 是循环中的break语句

在代码中都找不到。


fyi,代码模式while(true)是创建无限循环的常用方法,这是等待请求的Web服务所需要的