父类子类递归调用造成的堆栈溢出该怎么解决?
//我这有两个CLASS文件,想画一个坦克然后控制其移动,但是却造成了递归导致堆栈溢出的问题
//这是 MAIN函数
package MyTamk1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Mm extends JFrame{
MyTank xiuwen1;
public static void main(String[] args) {
Mm i=new Mm();
}
public Mm() {
//这个class中的错误出现在这↓
xiuwen1=new MyTank();
this.add(xiuwen1);
this.setSize(400, 300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
//这个是我画的坦克
package MyTamk1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class MyTank extends JPanel implements KeyListener{
//提示问题就出现在这一行↓
Mm ol=new Mm();
int x=0;
int y=0;
public void paint(Graphics g) {
super.paint(g);
g.drawRect(50+x, 50+y,70,70);
//左轮胎
g.drawOval(23+x, 25+y, 30, 120);
//左轮子
g.drawOval(25+x, 50+y, 25, 25);
g.drawOval(25+x, 90+y, 25, 25);
//右轮胎
g.drawOval(117+x, 25+y, 30, 120);
//右轮子
g.drawOval(120+x, 50+y, 25, 25);
g.drawOval(120+x, 90+y, 25, 25);
//主炮
g.drawOval(70+x,70+y,30, 30);
//炮管
g.drawRect(80+x, 80+y, 10, 90);
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_DOWN)
{
System.out.println("sssssss");
y=y+3;
}
else if(e.getKeyCode()==KeyEvent.VK_LEFT)
{
x=x-3;
}
else if(e.getKeyCode()==KeyEvent.VK_UP)
{
y=y-3;
}
else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
x=x+3;
}
ol.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO 自动生成的方法存根
}
@Override
public void keyTyped(KeyEvent e) {
// TODO 自动生成的方法存根
}
}
这个问题应该怎么解决?谢谢
//这是 MAIN函数
package MyTamk1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Mm extends JFrame{
MyTank xiuwen1;
public static void main(String[] args) {
Mm i=new Mm();
}
public Mm() {
//这个class中的错误出现在这↓
xiuwen1=new MyTank();
this.add(xiuwen1);
this.setSize(400, 300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
//这个是我画的坦克
package MyTamk1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class MyTank extends JPanel implements KeyListener{
//提示问题就出现在这一行↓
Mm ol=new Mm();
int x=0;
int y=0;
public void paint(Graphics g) {
super.paint(g);
g.drawRect(50+x, 50+y,70,70);
//左轮胎
g.drawOval(23+x, 25+y, 30, 120);
//左轮子
g.drawOval(25+x, 50+y, 25, 25);
g.drawOval(25+x, 90+y, 25, 25);
//右轮胎
g.drawOval(117+x, 25+y, 30, 120);
//右轮子
g.drawOval(120+x, 50+y, 25, 25);
g.drawOval(120+x, 90+y, 25, 25);
//主炮
g.drawOval(70+x,70+y,30, 30);
//炮管
g.drawRect(80+x, 80+y, 10, 90);
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_DOWN)
{
System.out.println("sssssss");
y=y+3;
}
else if(e.getKeyCode()==KeyEvent.VK_LEFT)
{
x=x-3;
}
else if(e.getKeyCode()==KeyEvent.VK_UP)
{
y=y-3;
}
else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
x=x+3;
}
ol.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO 自动生成的方法存根
}
@Override
public void keyTyped(KeyEvent e) {
// TODO 自动生成的方法存根
}
}
这个问题应该怎么解决?谢谢
...全文
相关推荐
堆栈溢出的解决方法
因此,了解栈溢出的解决方法对于编程者来说非常重要。什么是栈溢出?栈溢出是指程序的栈空间不足以存储所有的局部变量和函数调用信息时所发生的错误。
IAR编译器堆栈溢出问题查找
以下是一些关于如何查找和解决IAR编译器堆栈溢出问题的详细信息:1. **理解堆栈的工作原理**: 堆栈是内存中一块特殊的区域,用于存储函数调用的相关信息。
一个不会出现堆栈溢出的快速排序算法
当递归深度过大,即函数调用过多时,堆栈空间会被耗尽,从而引发堆栈溢出错误。
函数递归调用堆栈分析.doc
首先,我们需要了解递归函数的工作原理。递归函数是一种特殊的函数,它可以调用自身,以便解决问题。
递归和非递归方式计算Ackerman函数
然而,递归计算 Ackerman 函数的问题在于,随着m和n的增加,函数调用的深度迅速增长,可能导致栈溢出或者长时间的计算。这就是为什么非递归方法,如使用堆栈,变得重要。


Eclipse
