我遇到以下代码的问题:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
public class Fraktalz extends Applet{
private static final long serialVersionUID = 1L;
Graphics grafika;
public void paint(Graphics g){
g.setColor(Color.white);
g.fillRect(0, 0, 640, 480);
g.setColor(Color.black);
smok(200,360,500,120,20);
}
public void smok(int x1, int y1, int x2, int y2, int iteracja){
if (iteracja == 0){
grafika.drawLine(x1,y1,x2,y2);
} else{
int cx = (x1 + x2) / 2;
int cy = (y1 + y2) / 2;
int x3 = cx + (y2 - cy);
int y3 = cy + (x2 - cx);
smok(x1,y1,y3,y3,iteracja-1);
smok(x2,y2,x3,y3, iteracja-1);
}
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Fraktalz();
}
});
}
}
它说我在nullPointerException
获得Graphics grafika;
当我完成时:
Fraktalz fr = new Fraktalz();
Graphics grafika = fr.getGraphics();
我收到了一个错误:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.lang.Class.getClassLoader(Unknown Source)
at java.awt.Component.checkCoalescing(Unknown Source)
at java.awt.Component.<init>(Unknown Source)
at java.awt.Container.<init>(Unknown Source)
at java.awt.Panel.<init>(Unknown Source)
at java.awt.Panel.<init>(Unknown Source)
at java.applet.Applet.<init>(Unknown Source)
at Fraktalz.<init>(Fraktalz.java:6)
at Fraktalz.<init>(Fraktalz.java:9)
at Fraktalz.<init>(Fraktalz.java:9)
有人可以帮我解决这个错误吗?
答案 0 :(得分:4)
创建一个构造函数并在那里初始化grafika:
public class Fraktalz extends Applet{
public Fraktalz() {
grafika = getGraphics();
}
}
我假设你试图像这样初始化它:
public class Fraktalz extends Applet{
Fraktalz fr = new Fraktalz();
Graphics grafika = fr.getGraphics();
...
}
这导致StackOverflow
,因为您正在创建Fraktalz
的实例,这导致其fr
成员通过创建Fraktalz
实例进行初始化,这再次导致其fr
{1}}成员......导致无限循环。
答案 1 :(得分:2)
这可能是无限递归。 paint()调用smok()。 smok()调用smok()或drawLine()。 drawLine()再次调用paint()......