java-native-access/jna · error · java.lang.NullPointerException

Function name may not be null

Error message

Function name may not be null

What it means

Validation guard in NativeLibrary.getFunction: it fires because the caller passed a null function name when requesting a native function from the library. There is no default or fallback symbol, so a non-null name is mandatory before the native symbol lookup is attempted.

Source

Thrown at src/com/sun/jna/NativeLibrary.java:612

        return getFunction(functionName, callFlags, encoding);
    }

    /**
     * Create a new  {@link Function} that is linked with a native
     * function that follows a given calling flags.
     *
     * @param    functionName
     *            Name of the native function to be linked with
     * @param    callFlags
     *            Flags affecting the function invocation
     * @param   encoding
     *                  Encoding to use to convert between Java and native
     *                  strings.
     * @throws   UnsatisfiedLinkError if the function is not found
     */
    public Function getFunction(String functionName, int callFlags, String encoding) {
        if (functionName == null) {
            throw new NullPointerException("Function name may not be null");
        }
        synchronized (functions) {
            String key = functionKey(functionName, callFlags, encoding);
            Function function = functions.get(key);
            if (function == null) {
                function = new Function(this, functionName, callFlags, encoding);
                functions.put(key, function);
            }
            return function;
        }
    }

    /** @return this native library instance's options. */
    public Map<String, ?> getOptions() {
        return options;
    }

    /** Look up the given global variable within this library.

View on GitHub (pinned to d036ad9781)

Solutions

  1. Pass a non-null function name string
  2. Check the source of the name (config, map lookup) and fail earlier with a clear message
  3. If the symbol may not exist, use getFunction with a fallback or catch UnsatisfiedLinkError, not null

Example fix

// before
Function f = lib.getFunction(config.get("fn"));
// after
String name = config.get("fn");
if (name == null) throw new IllegalArgumentException("Missing function name in config");
Function f = lib.getFunction(name);
Defensive patterns

Strategy: validation

Validate before calling

if (functionName == null || functionName.isEmpty()) {
    throw new IllegalArgumentException("functionName required");
}

Prevention

When it happens

Trigger: Calling lib.getFunction(null) or getFunction(null, callFlags) / getFunction(null, callFlags, encoding), typically when the function name comes from an uninitialized variable or config value.

Common situations: Building bindings where symbol names are read from a table or properties file that is missing an entry; reflection-driven wrappers passing null names.

Related errors


AI-assisted analysis of java-native-access/jna@d036ad9781 (2026-09-12). Data as JSON: /api/errors/54864430f6b8b572. Report an issue: GitHub.