+char *
+jwxyz_unicode_character_name (Display *dpy, Font fid, unsigned long uc)
+{
+ JNIEnv *env = XRootWindow (dpy, 0)->window.rh->jni_env;
+ /* FindClass doesn't like to load classes if GetStaticMethodID fails. Huh? */
+ jclass
+ c = (*env)->FindClass (env, "java/lang/Character"),
+ c2 = (*env)->FindClass (env, "java/lang/NoSuchMethodError");
+
+ if ((*env)->ExceptionOccurred(env)) abort();
+ jmethodID m = (*env)->GetStaticMethodID (
+ env, c, "getName", "(I)Ljava/lang/String;");
+ jthrowable exc = (*env)->ExceptionOccurred(env);
+ if (exc) {
+ if ((*env)->IsAssignableFrom(env, (*env)->GetObjectClass(env, exc), c2)) {
+ (*env)->ExceptionClear (env);
+ Assert (!m, "jwxyz_unicode_character_name: m?");
+ } else {
+ abort();
+ }
+ }
+
+ char *ret = NULL;
+
+ if (m) {
+ jstring name = (*env)->CallStaticObjectMethod (env, c, m, (jint)uc);
+ if (name)
+ ret = jstring_dup (env, name);
+ }
+
+ if (!ret) {
+ asprintf(&ret, "U+%.4lX", uc);
+ }
+
+ return ret;
+}
+
+