X-Git-Url: http://nitlanguage.org diff --git a/lib/java.nit b/lib/java.nit index cd433ba..de82015 100644 --- a/lib/java.nit +++ b/lib/java.nit @@ -49,7 +49,6 @@ redef class Sys fun jvm=(jvm: JavaVM) do jvm_cache = jvm # Current main `JniEnv` - # FIXME support threaded Java fun jni_env: JniEnv do if jni_env_cache == null then create_default_jvm @@ -74,6 +73,21 @@ redef class Sys self.jvm = jvm self.jni_env = builder.jni_env.as(not null) end + + # Get a Java class by its name from the current `jni_env` + fun load_jclass(name: NativeString): JClass import jni_env `{ + JNIEnv *nit_ffi_jni_env = Sys_jni_env(recv); + + // retreive the implementation Java class + jclass java_class = (*nit_ffi_jni_env)->FindClass(nit_ffi_jni_env, name); + if (java_class == NULL) { + fprintf(stderr, "Nit FFI with Java error: failed to load class.\\n"); + (*nit_ffi_jni_env)->ExceptionDescribe(nit_ffi_jni_env); + exit(1); + } + + return java_class; + `} end # A standard Java string `java.lang.String` @@ -142,4 +156,11 @@ redef extern class JavaObject JNIEnv *env = Sys_jni_env(sys); (*env)->DeleteGlobalRef(env, recv); `} + + # Delete this local reference + fun delete_local_ref import sys, Sys.jni_env `{ + Sys sys = JavaObject_sys(recv); + JNIEnv *env = Sys_jni_env(sys); + (*env)->DeleteLocalRef(env, recv); + `} end