From: Michael G. <gof...@us...> - 2007-09-07 11:09:48
|
Update of /cvsroot/octave/octave-forge/extra/java/src In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv27087/src Modified Files: __java__.cc Log Message: add some flexibility in java exception handling, controlled by new internal variable "java_debug" Index: __java__.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/extra/java/src/__java__.cc,v retrieving revision 1.32 retrieving revision 1.33 diff -u -d -r1.32 -r1.33 --- __java__.cc 6 Sep 2007 13:32:15 -0000 1.32 +++ __java__.cc 7 Sep 2007 11:09:45 -0000 1.33 @@ -58,6 +58,7 @@ static bool Vjava_convert_matrix = false; static bool Vjava_unsigned_conversion = true; +static bool Vjava_debug = false; template <class T> class java_local_ref @@ -114,6 +115,7 @@ typedef java_local_ref<jintArray> jintArray_ref; typedef java_local_ref<jbyteArray> jbyteArray_ref; typedef java_local_ref<jdoubleArray> jdoubleArray_ref; +typedef java_local_ref<jthrowable> jthrowable_ref; static octave_value box (JNIEnv* jni_env, jobject jobj, jclass jcls = 0); static int unbox (JNIEnv* jni_env, const octave_value& val, jobject_ref& jobj, jclass_ref& jcls); @@ -319,11 +321,20 @@ static octave_value check_exception (JNIEnv* jni_env) { octave_value retval; - if (jni_env->ExceptionCheck ()) + jthrowable_ref ex (jni_env, jni_env->ExceptionOccurred ()); + + if (ex) { - error ("java exception occured"); - jni_env->ExceptionDescribe (); + if (Vjava_debug) + jni_env->ExceptionDescribe (); jni_env->ExceptionClear (); + + jclass_ref jcls (jni_env, jni_env->GetObjectClass (ex)); + jmethodID mID = jni_env->GetMethodID (jcls, "toString", "()Ljava/lang/String;"); + jstring_ref js (jni_env, reinterpret_cast<jstring> (jni_env->CallObjectMethod (ex, mID))); + std::string msg = jstring_to_string (jni_env, js); + + error ("[java] %s", msg.c_str ()); } else retval = Matrix (); @@ -1598,6 +1609,11 @@ return SET_INTERNAL_VARIABLE (java_unsigned_conversion); } +DEFUN_DLD (java_debug, args, nargout, "") +{ + return SET_INTERNAL_VARIABLE (java_debug); +} + JNIEXPORT jboolean JNICALL Java_org_octave_Octave_call (JNIEnv *env, jclass, jstring funcName, jobjectArray argin, jobjectArray argout) { |