[英]Help with stack-overflow error?
這是我得到的錯誤:
java.lang.StackOverflowError
at apple.awt.CGraphicsDevice.getScreenInsets(Native Method)
at apple.awt.CGraphicsDevice.getScreenInsets(CGraphicsDevice.java:673)
at apple.awt.CToolkit.getScreenInsets(CToolkit.java:741)
at java.awt.Window.init(Window.java:394)
at java.awt.Window.<init>(Window.java:432)
at java.awt.Frame.<init>(Frame.java:403)
at java.awt.Frame.<init>(Frame.java:368)
at javax.swing.JFrame.<init>(JFrame.java:158)
at D3D.<init>(D3D.java:35)
at player.<init>(player.java:1)
at D3D.<init>(D3D.java:17)
at player.<init>(player.java:1)
這是玩家類:
public class player extends D3D
{
int playerX, playerY;
boolean east, west, south, north;
public void setPlayer()
{
playerX = 1; playerY = 1;
east=true; west=false; north=false; south=false;
}
}
這是D3D類:
public class D3D extends JFrame
{
player player = new player();
mapgeneration levelmap = new mapgeneration();
boolean ONE, TWO, THREE, FOUR, FIVE;
boolean ONEhighlight,TWOhighlight,THREEhighlight,FOURhighlight,FIVEhighlight;
Timer timer = new Timer(250,new ActionListener() {
public void actionPerformed(ActionEvent evt) {
repaint();
}
});
String tracer;
Image Example = Toolkit.getDefaultToolkit().getImage("images/example.png");
Image Startup = Toolkit.getDefaultToolkit().getImage("images/Startup.png");
Image ButtonHighlight = Toolkit.getDefaultToolkit().getImage("images/ButtonHighlight.png");
public D3D()
{
super();
setSize(342,277);
...
JPanel main = new JPanel()
{
public void paintComponent(final Graphics g)
{
super.paintComponent(g);
timer.start();
g.drawImage(Startup,0,0,this);
...
};
};
add(main);
}
public void init()
{
player.setPlayer();
levelmap.populateGraph();
}
public static void main(String[] args)
{
D3D game = new D3D();
game.setTitle("Dungens:3D");
game.init();
game.setVisible(true);
}
}
我已經看了幾個小時,並把它縮小到你在這里看到的。 說實話,我可能會看到一些愚蠢的小東西。
多謝你們。
我看到你的問題。 您的Player類擴展了您的D3D GUI - 導致一種瘋狂的循環引用。 當您循環地繼續創建玩家和D3D對象時,這將導致遞歸。
為了證明我是對的,只需運行這個非常簡單的代碼版本:
public class D3D {
Player player = new Player();
public static void main(String[] args) {
D3D game = new D3D();
}
}
class Player extends D3D {
}
因此,當創建D3D對象時,它會創建一個Player對象,並且由於它擴展了D3D,它會創建另一個Player對象,因為它是一個D3D對象,所以創建另一個Player對象,然后依次打開。
但即使它沒有引起遞歸,玩家也不應該擴展GUI,因為玩家不是gui; 它們是完全不同的邏輯結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.