bytedeco/javacpp

NPE when loading a built library

Open

#584 opened on Jun 23, 2022

View on GitHub
 (4 comments) (0 reactions) (0 assignees)Java (620 forks)batch import
bughelp wanted

Repository metrics

Stars
 (4,279 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

Hello. I've found the following issue.

I built dll-library of generated JNI C++ integration code and tried to load it via Loader.loadLibrary but I got a NullPointerException. Here is the stacktrace:

java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
	at java.util.ArrayDeque.addFirst(ArrayDeque.java:233)
Caused by: java.lang.NullPointerException

	at java.util.ArrayDeque.push(ArrayDeque.java:508)
	at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1651)
	at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1611)
	at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1603)
	at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1597)
	at Test.<clinit>(Test.java:12)

I think it is related to method which puts cls to the related method as null:

public static String loadLibrary(URL[] urls, String libnameversion, String ... preloaded) {
    return loadLibrary(null, urls, libnameversion, preloaded);
}

public static synchronized String loadLibrary(Class<?> cls, URL[] urls, String libnameversion, String ... preloaded) {
    //...
    classStack.get().push(cls);
    //...
}

I would suggest to return some more understandable error message. The version of javacpp I've used is 1.5.7

Contributor guide