2012-06-17 26 views
0

我一直在试图在我的游戏中实现一个Keyboard类,并且收到下面的异常。这只是一个片段。完整的例外持续了很长时间。当使用LWJGL的Keyboard类时java.lang.StackOverflowError

Exception in thread "main" java.lang.StackOverflowError 
at org.lwjgl.opengl.DisplayMode.<init>(DisplayMode.java:63) 
at oregon.client.Oregon.<init>(Oregon.java:10) 
at oregon.src.Controller.<init>(Controller.java:9) 
at oregon.client.Oregon.<init>(Oregon.java:12) 
at oregon.src.Controller.<init>(Controller.java:9) 
at oregon.client.Oregon.<init>(Oregon.java:12) 
at oregon.src.Controller.<init>(Controller.java:9) 

下面是主类(oregon.client.Oregon)代码:

package oregon.client; 

import oregon.src.Controller; 

import org.lwjgl.LWJGLException; 
import org.lwjgl.opengl.Display; 
import org.lwjgl.opengl.DisplayMode; 

public class Oregon { 
    public DisplayMode normal = new DisplayMode(640, 640); 

    public Controller controls = new Controller(); 

    public boolean fullscreen = false; 

    public void start() { 
     try { 
      create(); 
     } catch (LWJGLException e) { 
      stop(e); 
     } 

     while (!Display.isCloseRequested()) { 
      events(); 
      Display.update(); 
     } 

     Display.destroy(); 
    } 

    public void events() { 
     try { 
      controls.getInput(); 
     } catch (LWJGLException e) { 
      stop(e); 
     } 
    } 

    public void setFullscreen() { 
     try { 
      if (!fullscreen) { 
       Display.setFullscreen(true); 
       fullscreen = true; 
      } else if (fullscreen) { 
       Display.setDisplayMode(normal); 
       fullscreen = false; 
      } 
     } catch (LWJGLException e) { 
      stop(e); 
     } 
    } 

    public void create() throws LWJGLException { 
     if (fullscreen) { 
      Display.setFullscreen(true); 
     } else if (!fullscreen) { 
      Display.setDisplayMode(normal); 
     } 

     Display.create(); 
    } 

    public void stop() { 
     System.exit(0); 
     Display.destroy(); 
    } 

    public void stop(Exception e) { 
     e.printStackTrace(); 
     System.exit(0); 
     Display.destroy(); 
    } 

    public static void main(String args[]) { 
     Oregon oregon = new Oregon(); 
     oregon.start(); 
    } 
} 

下面是我的键盘类的代码: -

package oregon.src; 

import oregon.client.Oregon; 

import org.lwjgl.LWJGLException; 
import org.lwjgl.input.Keyboard; 

public class Controller { 
    public Oregon oregon = new Oregon(); 

    public void getInput() throws LWJGLException { 
     while (Keyboard.next()) { 
      if (Keyboard.getEventKeyState()) { 
       if (Keyboard.getEventKey() == Keyboard.KEY_F11) { 
        oregon.setFullscreen(); 
       } 
      } 
     } 
    } 
} 

如果有用LWJGL专家出来,你能帮我解决吗?谢谢,我希望我能得到一些帮助。 :D

回答

3

与LWJGL无关。简单代码中的堆栈溢出总是因为意外的无限循环。你有一个:Controller尝试创建一个Oregon(这条线:public Oregon oregon = new Oregon();),然后尝试创建一个Controller,它试图...(等)

+0

我改变了“公共俄勒冈州俄勒冈=新俄勒冈州();”从控制器类“公共俄勒冈州俄勒冈州,”但现在我有一个NullPointerException。你能帮忙吗? –

2

当你创建一个Oregon情况下,它会创建一个Controller例如,它会创建一个Oregon实例,它创建了一个Controller实例,它创建了一个...

什么你应该做在你的控制器不创建一个Oregon实例,但通过你现有的实例作为参数传递给Controller构造并存储(或其他周围的方式)。

伪代码:

public Oregon() { 
    controller = new Controller(this); 
    ... 
} 
public Controller(Oregon oregon) { 
    this.oregon = oregon; 
    ... 
} 
+0

我不明白。你能告诉我代码吗? –

+0

我已经发布了代码。 – Mat

+0

对不起,我没有刷新! :) –