0
私はJava GUIを使用して遊んでいますが、その理由を理解できないエラーが発生しました。Java GUIのフラッド・フィル・エラー
私のプログラムは、(ラインの内側の色を充填)洪水充填の周りに基づいていますが、私は埋めるためにしようとすると、私はこのエラーを取得します
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.util.Hashtable.get(Unknown Source)
at javax.swing.UIDefaults.getFromHashtable(Unknown Source)
at javax.swing.UIDefaults.get(Unknown Source)
at javax.swing.MultiUIDefaults.get(Unknown Source)
at javax.swing.UIDefaults.getColor(Unknown Source)
at javax.swing.UIManager.getColor(Unknown Source)
at javax.swing.LookAndFeel.installColors(Unknown Source)
at javax.swing.LookAndFeel.installColorsAndFont(Unknown Source)
at javax.swing.plaf.basic.BasicLabelUI.installDefaults(Unknown Source)
at javax.swing.plaf.basic.BasicLabelUI.installUI(Unknown Source)
at javax.swing.JComponent.setUI(Unknown Source)
at javax.swing.JLabel.setUI(Unknown Source)
at javax.swing.JLabel.updateUI(Unknown Source)
at javax.swing.JLabel.<init>(Unknown Source)
at javax.swing.JLabel.<init>(Unknown Source)
at MapPanel.refreshImage(MapPanel.java:167)
at MapPanel.setImage(MapPanel.java:162)
at MapPanel.floodFill(MapPanel.java:224)
[これらの1の繰り返しはかなり]
at MapPanel.floodFill(MapPanel.java:231)
at MapPanel.floodFill(MapPanel.java:230)
[ライン230及び231のためのコード]
floodFill(newImage, mark, row - 1, col, srcColor, tgtColor);
floodFill(newImage, mark, row + 1, col, srcColor, tgtColor);
画像は色で更新されるすべてではありませんが...
は、私はしばらくの間、この上で立ち往生されていますし、任意のヘルプは行います、あなたは私が言うことをしようとしているものを理解してほしいですありがとう。
コード
// Mouse Listener
public class MouseCapture implements MouseListener
{
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Mouse clicked");
System.out.println(e.getX() + "," + e.getY());
boolean[][] mark = new boolean[image.getHeight()][image.getWidth()];
for (int row = e.getY() + 23; row < image.getHeight(); row++) {
for (int col = e.getX() - 200; col < image.getWidth(); col++) {
floodFill(image, mark, row, col, Color.WHITE, getColor());
}
}
image.setRGB(e.getX(), e.getY() + 23, Color.BLACK.getRGB());
refreshImage();
}
}
private void floodFill(BufferedImage newImage, boolean[][] mark, int row, int col, Color srcColor, Color tgtColor)
{
// make sure row and col are inside the image
if (row < 0) return;
if (col < 0) return;
if (row >= newImage.getHeight()) return;
if (col >= newImage.getWidth()) return;
// make sure this pixel hasn't been visited yet
if (mark[row][col]) return;
// make sure this pixel is the right color to fill
if (!(newImage.getRGB(col, row) == (srcColor.getRGB()))) return;
// fill pixel with target color and mark it as visited
image.setRGB(col, row, tgtColor.getRGB());
mark[row][col] = true;
// set drawn image
setImage(newImage);
// recursively fill surrounding pixels
// (this is equivelant to depth-first search)
floodFill(newImage, mark, row - 1, col, srcColor, tgtColor);
floodFill(newImage, mark, row + 1, col, srcColor, tgtColor);
floodFill(newImage, mark, row, col - 1, srcColor, tgtColor);
floodFill(newImage, mark, row, col + 1, srcColor, tgtColor);
}
私の解決策を試しましたか?乾杯! –
@Wojciech Kaziorの素晴らしい例は、明日私の心が揚げられ、睡眠が必要なので明日に私のプログラムに追加されます(コードダーは睡眠が必要です:D) ありがとう! –