slint-ui/slint · error

JNI error: {e:#?}

Error message

JNI error: {e:#?}

What it means

Error "JNI error: {e:#?}" thrown in slint-ui/slint.

Source

Thrown at internal/backends/android-activity/javahelper.rs:292

    is_instance_of = {
        JClassLoader,
    }
}

bind_java_type! {
    DexFileClassLoader => "dalvik.system.DexClassLoader",
    constructors {
        fn new(dex_path: JString, optimized_directory: JString, library_search_path: JString, parent: JClassLoader),
    },
    is_instance_of = {
        JClassLoader,
    }
}

// See `AttachmentExceptionPolicy::PreReThrowPostCatch` in `jni` crate.
#[track_caller]
pub fn print_jni_error(_app: &AndroidApp, e: jni::errors::Error) -> ! {
    panic!("JNI error: {e:#?}")
}

#[allow(dead_code)]
pub struct JavaHelper(jni::refs::Global<SlintAndroidJavaHelper<'static>>, AndroidApp);

fn get_helper_class_loader(
    env: &mut Env,
    native_activity: &AndroidActivity<'_>,
) -> Result<&'static JClassLoader<'static>, jni::errors::Error> {
    static DEX_CLASS_LOADER: OnceLock<jni::refs::Global<JClassLoader<'static>>> = OnceLock::new();

    fn build_dex_class_loader<'local>(
        env: &mut Env<'local>,
        native_activity: &AndroidActivity<'_>,
    ) -> Result<JClassLoader<'local>, jni::errors::Error> {
        let native_activity = env.new_local_ref(native_activity)?;
        let app_context = AndroidContext::cast_local(env, native_activity)?;
        let context_class_loader = app_context.get_class_loader(env)?;

View on GitHub (pinned to 3fd8f2ec03)

Solutions

  1. Inspect the JNI error details in the panic message and fix the Java side call.
  2. Ensure the JavaVM and class loader used are valid for the current thread.

When it happens

Trigger: Thrown at internal/backends/android-activity/javahelper.rs:292 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of slint-ui/slint@3fd8f2ec03 (2026-08-19). Data as JSON: /api/errors/6013662203b009f2. Report an issue: GitHub.