Java GL15在lwjgl中被破坏

Java GL15在lwjgl中被破坏,java,opengl,lwjgl,Java,Opengl,Lwjgl,当我试图调用lwjgl中的任何GL15函数时,我得到一个NullPointerException。该问题是由GL15.class中名为caps的变量引起的。Caps的加载方式如下:ContextCapabilities Caps=GLContext.getCapabilities;。但在此之后,caps为空。我想知道的是,这是我初始化lwjgl的方式的问题,还是lwjgl本身的问题。我使用以下代码初始化lwjgl: Display.setDisplayMode(new DisplayMode(8

当我试图调用lwjgl中的任何GL15函数时,我得到一个NullPointerException。该问题是由GL15.class中名为caps的变量引起的。Caps的加载方式如下:ContextCapabilities Caps=GLContext.getCapabilities;。但在此之后,caps为空。我想知道的是,这是我初始化lwjgl的方式的问题,还是lwjgl本身的问题。我使用以下代码初始化lwjgl:

Display.setDisplayMode(new DisplayMode(800, 600));
Display.create();

查看代码,capabilities对象似乎存储在非继承的ThreadLocal中。这意味着在一个线程中初始化/设置的功能对象将不可用于其他线程。我怀疑这是你问题的根本原因

顺便说一句,声明是线程安全的,但我认为不是。如果查看上面链接页面中的getCapabilities方法的源代码,它将访问名为fast_path_cache的私有静态,而不进行任何同步,然后引用对象的字段。如果其他线程最近发生了更改。。。或者正在改变。。。变量或它引用的对象,则此线程可能会看到过时和不一致的值

仅仅同步执行更新的代码是不够的。仅仅说代码在javadoc中是线程安全的是不够的


如果使用此库的人希望向维护人员报告此情况,请随时报告。但是请先仔细检查我对代码的理解

那么如何初始化它呢?给我们看一些代码,我们喜欢代码。我解决了我的问题。在进行窗口初始化之前,我试图使用gl代码。