Java 如何在LWJGL 3中使用glfwSetWindowUserPointer?

Java 如何在LWJGL 3中使用glfwSetWindowUserPointer?,java,game-engine,lwjgl,Java,Game Engine,Lwjgl,我正在尝试创建一个窗口类来抽象所有GLFW内容。问题是我不知道如何在LWJGL中使用glfwSetWindowUserPointer 我以前使用过函数,但是在C++中使用过。现在我将使用LWJGL转到Java 在C++中,我会做一些类似的事情: glfwSetWindowUserPointer(myWindow和myData) 但是在LWJGL中,函数需要2long,其中第一个参数是窗口句柄,但我不知道如何处理第二个参数 如何将指针传递到包含回调中所需的所有数据的对象 提前感谢扩展关于jnit

我正在尝试创建一个窗口类来抽象所有GLFW内容。问题是我不知道如何在LWJGL中使用glfwSetWindowUserPointer

我以前使用过函数,但是在C++中使用过。现在我将使用LWJGL转到Java

在C++中,我会做一些类似的事情:

glfwSetWindowUserPointer(myWindow和myData)
但是在LWJGL中,函数需要2
long
,其中第一个参数是窗口句柄,但我不知道如何处理第二个参数

如何将指针传递到包含回调中所需的所有数据的对象

提前感谢

扩展关于
jnitiveinterface
memGlobalRefToObject

import org.lwjgl.system.MemoryUtil;
import org.lwjgl.system.jni.JNINativeInterface;

class JavaObject {
    String message;

    JavaObject(String message) {
        this.message = message
    }
}

final long pointer = JNINativeInterface.NewGlobalRef(new JavaObject("Hello"));
JavaObject object = MemoryUtil.memGlobalRefToObject(pointer);
JNINativeInterface.DeleteGlobalRef(pointer);

System.out.println(object.message) // => "Hello"

// Already deleted the strong reference held by the native part of the application.
object = MemoryUtil.memGlobalRefToObject(pointer);
System.out.println(object) // => null
有一点建议:对于
glfwSetMonitorCallback
glfwSetErrorCallback
设置的回调,我只使用GLFW用户指针。对于窗口回调,您不需要它,因为您为每个窗口设置了一个回调,所以您已经有了对每个Java包装器类的引用

class Window {
    final long handle;

    int width;
    int height;

    WindowObserver observer;

    Window(final long handle, final int width, final int height) {
        this.handle = handle;
        this.width = width;
        this.height = height;

        glfwSetWindowSizeCallback(handle, (handle, w, h) -> {
            if (observer != null) {
                observer.windowDidResize(this, this.width, this.height, w, h);
            }

            this.width = w;
            this.height = h;
        });
    }
}

查看
jniationiveinterface.New/DeleteGlobalRef
memGlobalRefToObject