java - 带有 LWJGL 3 初始化的 NullPointerException

标签 java lwjgl

我正在尝试使用 LWJGL 版本 3 在 IntelliJ 中设置一个新项目。我刚刚尝试了这个 example : 每当我尝试运行它时, 我在加载库时收到由 java.lang.NullPointerException 引起的 java.lang.ExceptionInInitializerError

我的 natives 在 project_root/lib/lwjgl/native/macosx/x64,所以我的 vm 参数是:
-Djava.library.path=lib/lwjgl/native/macosx/x64
我还将 lwjgl 添加到类路径中。

堆栈跟踪是:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at test.HelloWorld.execute(HelloWorld.java:18)
    at test.HelloWorld.main(HelloWorld.java:80)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: java.lang.NullPointerException
    at org.lwjgl.LWJGLUtil.loadLibrarySystem(LWJGLUtil.java:326)
    at org.lwjgl.Sys$1.run(Sys.java:36)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.lwjgl.Sys.<clinit>(Sys.java:33)
    ... 7 more

最佳答案

解决方案是为 java.library.path 指定一个绝对路径,而不是相对路径。

在 LWJGL 论坛上,there was a user with a similar problem (我通过搜索 the problematic line 并在论坛上搜索找到了它)。对话的相关部分是:

lightbringer writes:

I think I figured it out. In LWJGLUtil.java I took out some code and ran it from my main()`. I got an

java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: lib/native\lwjgl.dll`

inside loadLibrary(). System.load() apparently needs an absolute path but you are passing it a relative path.

I tested with -Djava.library.path=E:\Dropbox\private\projects\solariad\redist\lib\native and this indeed did work as expected.


问题的根源是 LWJGL 使用 System.load() ,这本身没有问题,但它确实需要它加载的库的绝对路径名(另请参见 source)。

如果你看一下LWJGLUtil.java (尽管撰写本文时的版本与您的堆栈跟踪不完全对应)和 Sys.doLoadLibrary() ,您可以看到它尝试通过遍历 java.library.path 中的所有路径字符串、附加库名称并尝试 System.load() 来加载库在那些路径上。由于 load() 需要绝对路径,这意味着 java.library.path 也必须包含 LWJGL 库的绝对路径。

不幸的是,问题的根本原因被 NPE 弄糊涂了,但是,你知道,对于我们这些可怜的程序员来说,这是一个艰苦的生活!

关于java - 带有 LWJGL 3 初始化的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27079503/

相关文章:

java - 查找Netbeans中设置的主项目的路径

java - slick.util 和 lwjgl 纹理的问题

java - OpenGL 应用程序中 3D 模型的开放格式?

java - 高度图上 2 个顶点之间的空间

java - Eclipselink以有序的方式读取复杂的对象模型

java - 队列的线程安全映射

java - 无法在 Java 中运行多个 SQL 更新语句

java - 投影矩阵的作用不仅仅是缩放,对吗?

java - Sys.getTime() 和 Sys.getTimerResolution() 的替代品?

java - Ajax 响应返回 null