我需要你的帮助。 我一直得到这个例外: -
Exception in thread "main" java.lang.IllegalStateException: Keyboard must be created before you can read events
at org.lwjgl.input.Keyboard.next(Keyboard.java:467)
at oregon.src.Controller.<init>(Controller.java:15)
at oregon.client.Oregon.start(Oregon.java:19)
at oregon.client.Oregon.main(Oregon.java:84)
我不知道如何修复它。我之前发布了一个问题,有人帮助过我,但后来又引发了这个问题。 这是(oregon.src.Controller)的代码:
package oregon.src;
import oregon.client.Oregon;
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
public class Controller {
public Oregon oregon;
public Controller(Oregon oregon) throws LWJGLException {
this.oregon = oregon;
while (Keyboard.next()) {
if (Keyboard.getEventKeyState()) {
if (Keyboard.getEventKey() == Keyboard.KEY_F11) {
oregon.setFullscreen();
}
}
}
}
}
这是(oregon.client.Oregon)的代码:
package oregon.client;
import oregon.src.Controller;
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
public class Oregon {
public static DisplayMode normal = new DisplayMode(640, 640);
public Controller controller;
public static boolean fullscreen = false;
public void start() {
try {
controller = new Controller(this);
} catch (LWJGLException e1) {
e1.printStackTrace();
}
try {
create();
} catch (LWJGLException e) {
stop(e);
}
while (!Display.isCloseRequested()) {
events();
Display.update();
}
Display.destroy();
}
public void events() {
try {
new Controller(this);
} catch (LWJGLException e) {
e.printStackTrace();
}
}
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 static void create() throws LWJGLException {
if (fullscreen) {
Display.setFullscreen(true);
} else if (!fullscreen) {
Display.setDisplayMode(normal);
}
Keyboard.create();
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();
}
}
如果有人可以帮助我,我将非常感激。 谢谢。
修改: - 现在我收到了这个错误。
Exception in thread "main" java.lang.IllegalStateException: Display must be created.
at org.lwjgl.input.Keyboard.create(Keyboard.java:319)
at oregon.src.Controller.<init>(Controller.java:19)
at oregon.client.Oregon.start(Oregon.java:19)
at oregon.client.Oregon.main(Oregon.java:84)
答案 0 :(得分:3)
如错误所示 - 您需要创建keyboard
public Controller(Oregon oregon) throws LWJGLException {
this.oregon = oregon;
Keyboard.create(); // <- add this here.
while (Keyboard.next()) {
if (Keyboard.getEventKeyState()) {
if (Keyboard.getEventKey() == Keyboard.KEY_F11) {
oregon.setFullscreen();
}
}
}
}
来自API:
编辑:似乎你不能同时初始化它们,所以试试这种方法 - 在if语句中初始化“创建”键盘。必须首先创建显示。该 这样做的原因是键盘有一个“聚焦”的窗口。
Keyboard
:
if ( !Keyboard.isCreated() && !getPrivilegedBoolean("org.lwjgl.opengl.Display.nokeyboard") ) {
try {
Keyboard.create();
} catch (LWJGLException e) {
if ( LWJGLUtil.DEBUG ) {
e.printStackTrace(System.err);
} else {
LWJGLUtil.log("Failed to create Keyboard: " + e);
}
}
}
Here is posted similar source code, that seems to be working fine.
答案 1 :(得分:0)
如果要防止错误,请在主函数中初始化并创建显示,如下所示:
public static void main(String args[]) {
Display.setDisplayMode(new DisplayMode(800, 600));
Display.create();
Oregon oregon = new Oregon();
oregon.start();
}
(在需要/想要的地方添加try / catch)。这对我来说是一个快速测试。