We should store the exceptions that were thrown in a static member, and make it accessible so GUIs can help a user resolve a native library load failure:

  private static Throwable nativeLoadError;

  public static Throwable getNativeImplementationLoadException() {
    return nativeLoadError;
  }

That resolves the problem you have here about logging to System.out.println() when it doesn't load.  :-)