Java 使用其他类方法时出错

Java 使用其他类方法时出错,java,Java,我在我的主类中创建了一个简单的JFrame,在我的类移动中,我扩展了JPanel并放置了PaintComponent方法。我实现了KeyListener来控制我在屏幕上绘制的矩形。在我的上一个类中,我创建了一个返回布尔值的方法,但当我尝试不使用该值时,它会导致大量错误 控制台中的错误: Exception in thread "main" java.lang.StackOverflowError at java.awt.Component.setBackground(Unknown So

我在我的主类中创建了一个简单的JFrame,在我的类移动中,我扩展了JPanel并放置了PaintComponent方法。我实现了KeyListener来控制我在屏幕上绘制的矩形。在我的上一个类中,我创建了一个返回布尔值的方法,但当我尝试不使用该值时,它会导致大量错误

控制台中的错误:

Exception in thread "main" java.lang.StackOverflowError
    at java.awt.Component.setBackground(Unknown Source)
    at javax.swing.JComponent.setBackground(Unknown Source)
    at javax.swing.LookAndFeel.installColors(Unknown Source)
    at javax.swing.LookAndFeel.installColorsAndFont(Unknown Source)
    at javax.swing.plaf.basic.BasicPanelUI.installDefaults(Unknown Source)
    at javax.swing.plaf.basic.BasicPanelUI.installUI(Unknown Source)
    at javax.swing.JComponent.setUI(Unknown Source)
    at javax.swing.JPanel.setUI(Unknown Source)
    at javax.swing.JPanel.updateUI(Unknown Source)
    at javax.swing.JPanel.<init>(Unknown Source)
    at javax.swing.JPanel.<init>(Unknown Source)
    at javax.swing.JPanel.<init>(Unknown Source)
    at Move.<init>(Move.java:15)
    at Collision.<init>(Collision.java:4)
    at Move.<init>(Move.java:11)
    at Collision.<init>(Collision.java:4)
使用paint组件和keylistener的移动类。我认为这与c有关。Left()=true

还有碰撞类

public class Collision{

    Move m = new Move();

    Boolean left;

    public Boolean Left(){
        if(m.x>0){
            left=false;
        }
        return left;
    }

}

我希望我说的都很清楚,谢谢。

你得到了一个
堆栈溢出错误,因为你有一个循环依赖项。每次
移动
都会创建一个新的
碰撞
,每次
碰撞
都会创建一个新的
移动


您必须重新考虑您的设计,并在其他地方至少创建一个。

什么是“错误负载”?在此处提供其中一些。您不能让
移动
创建
碰撞
碰撞
创建
移动
。您将得到一个以内存不足结尾的循环。Collision甚至没有构造函数..+1到Keppil-您得到的是StackOverflower错误@没有,所以它会自动得到一个没有参数的。谢谢你,这很有帮助
    import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;

public class Move extends JPanel implements KeyListener {
    private static final long serialVersionUID = 1L;

    Collision c = new Collision();

    BufferedImage box;

    public Move() {
        addKeyListener(this);
        setFocusable(true);
        setFocusTraversalKeysEnabled(false);

    }

    int x = 100, y = 100;
    Boolean goLeft = false;

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        this.setBackground(Color.BLACK);

        if (goLeft == true && c.Left() == true) {
            x--;
        }

        g.setColor(Color.WHITE);
        g.drawRect(16, 16, x, y);

    }

    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if (keyCode == KeyEvent.VK_LEFT) {
            goLeft = true;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if (keyCode == KeyEvent.VK_LEFT) {
            goLeft = false;
        }

    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

}
public class Collision{

    Move m = new Move();

    Boolean left;

    public Boolean Left(){
        if(m.x>0){
            left=false;
        }
        return left;
    }

}