NullPointerException with LWJGL 3 Initialization
java, lwjgl
Solution
The solution is to specify an absolute path for `java.library.path`, rather than a relative one.
On the LWJGL forums, there was a user with a similar problem (I found this by searching for the problematic line and doing some hunting on the forum). The relevant part of the conversation is:
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.
The root of the issue is LWJGL's use of `System.load()`, which is not problematic in itself, but it does requires an absolute path name to the libraries it loads (see source as well).
If you take a look at LWJGLUtil.java (although the version at the time of this writing does not correspond exactly to your stack trace) and `Sys.doLoadLibrary()`, you can see that it attempts to load libraries by going through all the path strings in `java.library.path`, appending the library name, and trying `System.load()` on those paths. Since `load()` requires an absolute path the implication is that `java.library.path` must contain the absolute path to the LWJGL libraries as well.
It is unfortunate that the root cause of the problem was muddled by the NPE but, you know, it's a hard knock life for us poor programmers!
Problem
I'm trying to setup a new project in IntelliJ using LWJGL version 3. I just tried out this example: Whenever I try to run it, I get a `java.lang.ExceptionInInitializerError` caused by a `java.lang.NullPointerException` while loading the library. My natives are in project_root/lib/lwjgl/native/macosx/x64, so my vm argument is: `-Djava.library.path=lib/lwjgl/native/macosx/x64` I have also added lwjgl to the classpath. The stack trace is: ``` 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 ```