Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- jthrowable java_exception;
- jclass java_class;
- jmethodID method;
- java_exception = (*jEnv)->ExceptionOccurred(jEnv);
- assert (java_exception != NULL);
- java_class = (*jEnv)->GetObjectClass (jEnv, java_exception);
- assert (java_class != NULL);
- method = (*jEnv)->GetMethodID (jEnv, java_class, "getMessage", "()Ljava/lang/String;");
- if (method == NULL) {
- printf ("Seriously, how do I get here?!n");
- (*jEnv)->ExceptionDescribe (jEnv);
- return;
- }
- java_class = (*jEnv)->FindClass (jEnv, "java/lang/Throwable");
- method = (*jEnv)->GetMethodID (jEnv, java_class, "getMessage", "()Ljava/lang/String;");
- #include <cstdio>
- #include <jni.h>
- int
- main(int argc, char** argv)
- {
- if (argc != 3) {
- std::fprintf(stderr, "usage: %s class messagen", argv[0]);
- return 1;
- }
- JavaVM* jvm;
- void* penv;
- JavaVMInitArgs args = {JNI_VERSION_1_6};
- if (jint res = JNI_CreateJavaVM(&jvm, &penv, &args)) {
- std::fprintf(stderr, "Can's create JVM: %dn", res);
- return -res;
- }
- JNIEnv* env(static_cast<JNIEnv*>(penv));
- jint vers(env->GetVersion());
- std::printf("JNI version %d.%dn", vers >> 16, vers & 0xffff);
- env->ThrowNew(env->FindClass(argv[1]), argv[2]);
- jthrowable exc(env->ExceptionOccurred());
- std::printf("Exception: %pn", exc);
- if (exc) {
- jclass exccls(env->GetObjectClass(exc));
- jclass clscls(env->FindClass("java/lang/Class"));
- jmethodID getName(env->GetMethodID(clscls, "getName", "()Ljava/lang/String;"));
- jstring name(static_cast<jstring>(env->CallObjectMethod(exccls, getName)));
- char const* utfName(env->GetStringUTFChars(name, 0));
- jmethodID getMessage(env->GetMethodID(exccls, "getMessage", "()Ljava/lang/String;"));
- jstring message(static_cast<jstring>(env->CallObjectMethod(exc, getMessage)));
- char const* utfMessage(env->GetStringUTFChars(message, 0));
- std::printf("Exception: %s: %sn", utfName, utfMessage);
- env->ReleaseStringUTFChars(message, utfMessage);
- env->ReleaseStringUTFChars(name, utfName);
- }
- return -jvm->DestroyJavaVM();
- }
Add Comment
Please, Sign In to add comment