# jni_func(..) { return cv_func(..); }\r
ret = "return "\r
ext = ""\r
+ default = "return 0"\r
if fi.ctype == "void":\r
ret = ""\r
+ default = ""\r
elif fi.ctype == "string":\r
ret = "return env->NewStringUTF"\r
ext = ".c_str()"\r
+ default = 'return env->NewStringUTF("")'\r
elif fi.ctype in self.classes: # wrapped class:\r
ret = "return (jlong) new " + self.classes[fi.ctype].jname\r
\r
JNIEXPORT $rtype JNICALL Java_org_opencv_${module}_$fname\r
($args)\r
{\r
- //LOGD("$module::$fname()");\r
- $j2cv\r
- $ret( $cvname( $cvargs )$ext );\r
+ try {\r
+ //LOGD("$module::$fname()");\r
+ $j2cv\r
+ $ret( $cvname( $cvargs )$ext );\r
+ } catch(cv::Exception e) {\r
+ //LOGD("$module::$fname() catched cv::Exception: %s", e.what());\r
+ jclass je = env->FindClass("org/opencv/CvException");\r
+ if(!je) je = env->FindClass("java/lang/Exception");\r
+ env->ThrowNew(je, e.what());\r
+ $default;\r
+ } catch (...) {\r
+ //LOGD("$module::$fname() catched ...");\r
+ jclass je = env->FindClass("java/lang/Exception");\r
+ env->ThrowNew(je, "Unknown exception in JNI code {$module::$fname()}");\r
+ $default;\r
+ }\r
}\r
\r
\r
cvname = cvname, \\r
cvargs = ", ".join([a for a in cvargs]), \\r
ext = ext, \\r
+ default = default\r
) )\r
\r
# processing args with default values\r
--- /dev/null
+package org.opencv;\r
+\r
+public class CvException extends Exception {\r
+\r
+ private static final long serialVersionUID = 1L;\r
+\r
+ public CvException(String msg) {\r
+ super(msg);\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return "CvException [" + super.toString() + "]";\r
+ }\r
+}\r