Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LWJGL键盘输入不工作_Java_Keyboard_Jframe_Lwjgl - Fatal编程技术网

Java LWJGL键盘输入不工作

Java LWJGL键盘输入不工作,java,keyboard,jframe,lwjgl,Java,Keyboard,Jframe,Lwjgl,我正在编写一个LWJGL应用程序,在让键盘和鼠标类正常工作时遇到了一些问题。永远不会调用mouseWheelMoved、keyPressed和KeyRelease方法。我可以确认调用了listener.update方法 在这个应用程序中,我将显示嵌入到JFrame中,但即使我不这样做,它仍然无法工作,所以这似乎不是问题所在 控制台输出: 绘制地图 键盘和鼠标侦听器已初始化 (在此按键几分钟) 请求关闭应用程序 应用程序关闭 渲染器停止 渲染器结束 渲染器初始化: @Override publi

我正在编写一个LWJGL应用程序,在让键盘和鼠标类正常工作时遇到了一些问题。永远不会调用mouseWheelMoved、keyPressed和KeyRelease方法。我可以确认调用了listener.update方法

在这个应用程序中,我将显示嵌入到JFrame中,但即使我不这样做,它仍然无法工作,所以这似乎不是问题所在

控制台输出:

绘制地图
键盘和鼠标侦听器已初始化
(在此按键几分钟)
请求关闭应用程序
应用程序关闭
渲染器停止
渲染器结束

渲染器初始化:

@Override
public void run() {
    try {
        Display.setParent(canvas);
        Display.create();
        Display.setResizable(false);
        Display.setTitle("Display");
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glOrtho(0, 1, 0, 1, 0, 1);
        draw();
        listener.initialize();
    } catch (LWJGLException ex) {
        System.out.println("Could not initialize renderer: " + ex.getMessage());
        Thread.currentThread().interrupt();
    }
    do {
        listener.update();
        if(shouldUpdate)
            draw();
        Thread.yield();
    } while(!closing);
    System.out.println("Renderer Stopping");
    try {
        Display.destroy();
    } catch(Exception ex) {
        System.out.println("Error while stopping renderer: " + ex.getMessage());
    }
    listener.destroy();
    System.out.println("Renderer End");
}

侦听器类:

public void initialize() {
    try {
        Mouse.create();
        Keyboard.create();
        Keyboard.enableRepeatEvents(true);
        System.out.println("Keyboard & Mouse listener initialized");
    } catch (LWJGLException ex) {
        System.out.println("Could not initialize listener");
        Thread.currentThread().interrupt();
    }
}
public void update() {
    while(Keyboard.next()) { // Never True
        int key = Keyboard.getEventKey();
        if(Keyboard.getEventKeyState())
            keyPressed(key); // Never Called
        else
            keyReleased(key); // Never Called
        System.out.println(Keyboard.getKeyName(key)); // Never Printed
    }
    int amount = Mouse.getDWheel(); // Always 0
    if(amount != 0)
        mouseWheelMoved(amount); // Never Called
}
我想我需要调用“Display.update()”来刷新键盘输入


您可以忽略此行为,并通过调用Display.processMessages()、Mouse.poll()和Keyboard.poll()手动更新输入

很好的发现。消除了不必要的缓冲区交换。