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