使用图形填充颜色时发生 StackOverFlowException - 包含代码

StackOverFlowException while filling color using Graphics - Code Included

我想用蓝色填充小程序。我正在使用 paint(Graphics g) 方法执行此操作。填充小程序时,我在 8-10 秒后收到 WhosebugException。 我想摆脱它。如果我做错了,请建议我该怎么做或纠正我。我就此问过某人,他说它存储位置并稍后删除它们,因此堆栈总是几乎是空的。请帮助我。

代码:

import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

public class Flooding extends Applet
{
    boolean[][] mark;
    boolean justOnce = true;

    @Override
    public void init()
    {
        mark = new boolean[800][600];

        this.setSize(100, 500);
        this.setPreferredSize(new Dimension(100, 500));
        this.setVisible(true);
    }

    @Override
    public void start()
    {
        setBackground(Color.WHITE);
        setForeground(Color.BLACK);
    }

    @Override
    public void paint(Graphics g)
    {
        if(justOnce)
        {
            super.paint(g);
            justOnce = false;
        }

        for (int row=0; row<500; row++)
        {
            for (int col=0; col<100; col++) 
            {
                flood(mark, row, col, g);
            }
        }
    }

    private static void sleep(int msec)
    {
        try 
        {
            Thread.currentThread().sleep(msec);
        }
        catch (InterruptedException e) { }
    }

    public void flood( boolean[][] mark, int row, int col, Graphics g)
    {
        if (row < 0) return;
        if (col < 0) return;
        if (row > 100) return;
        if (col > 500) return;

        if (mark[row][col]) return;

        g.setColor(Color.BLUE);
        g.drawLine(row, col, row, col);

        mark[row][col] = true;

        repaint();
        sleep(1);

        flood(mark, row - 1, col, g);
        flood(mark, row, col, g);
        flood(mark, row + 1, col, g);
        flood(mark, row-1, col-1, g);
        flood(mark, row, col-1, g);
        flood(mark, row+1, col-1, g);
        flood(mark, row-1, col + 1, g);
        flood(mark, row, col + 1, g);
        flood(mark, row+1, col + 1, g);
    }
}

看看你的代码:第一次调用 flood() 是用坐标 (0, 0) 调用 flood(),坐标 (1, 0) 调用 flood().. . 使用您的尺寸,您可以达到 500 层深的递归。将您的代码更改为不使用递归。

(您当然可以使用 -Xss 增加堆栈大小,但您的代码已损坏,因此请修复它。)