diff --git a/sherpa-onnx/jni/offline-recognizer.cc b/sherpa-onnx/jni/offline-recognizer.cc index 5e4b359b6..82bd7ffed 100644 --- a/sherpa-onnx/jni/offline-recognizer.cc +++ b/sherpa-onnx/jni/offline-recognizer.cc @@ -300,11 +300,22 @@ Java_com_k2fsa_sherpa_onnx_OfflineRecognizer_createStream(JNIEnv * /*env*/, SHERPA_ONNX_EXTERN_C JNIEXPORT void JNICALL Java_com_k2fsa_sherpa_onnx_OfflineRecognizer_decode( - JNIEnv * /*env*/, jobject /*obj*/, jlong ptr, jlong streamPtr) { - auto recognizer = reinterpret_cast(ptr); - auto stream = reinterpret_cast(streamPtr); - - recognizer->DecodeStream(stream); + JNIEnv *env, jobject /*obj*/, jlong ptr, jlong streamPtr) { + try { + auto recognizer = reinterpret_cast(ptr); + auto stream = reinterpret_cast(streamPtr); + recognizer->DecodeStream(stream); + } catch (const std::exception& e) { + jclass exClass = env->FindClass("java/lang/RuntimeException"); + if (exClass != nullptr) { + env->ThrowNew(exClass, e.what()); + } + } catch (...) { + jclass exClass = env->FindClass("java/lang/RuntimeException"); + if (exClass != nullptr) { + env->ThrowNew(exClass, "Native exception: caught unknown exception"); + } + } } SHERPA_ONNX_EXTERN_C diff --git a/sherpa-onnx/jni/voice-activity-detector.cc b/sherpa-onnx/jni/voice-activity-detector.cc index a30423f70..9459ba846 100644 --- a/sherpa-onnx/jni/voice-activity-detector.cc +++ b/sherpa-onnx/jni/voice-activity-detector.cc @@ -112,14 +112,26 @@ JNIEXPORT void JNICALL Java_com_k2fsa_sherpa_onnx_Vad_delete(JNIEnv * /*env*/, SHERPA_ONNX_EXTERN_C JNIEXPORT void JNICALL Java_com_k2fsa_sherpa_onnx_Vad_acceptWaveform( JNIEnv *env, jobject /*obj*/, jlong ptr, jfloatArray samples) { - auto model = reinterpret_cast(ptr); - - jfloat *p = env->GetFloatArrayElements(samples, nullptr); - jsize n = env->GetArrayLength(samples); - - model->AcceptWaveform(p, n); - - env->ReleaseFloatArrayElements(samples, p, JNI_ABORT); + try { + auto model = reinterpret_cast(ptr); + + jfloat *p = env->GetFloatArrayElements(samples, nullptr); + jsize n = env->GetArrayLength(samples); + + model->AcceptWaveform(p, n); + + env->ReleaseFloatArrayElements(samples, p, JNI_ABORT); + } catch (const std::exception& e) { + jclass exClass = env->FindClass("java/lang/RuntimeException"); + if (exClass != nullptr) { + env->ThrowNew(exClass, e.what()); + } + } catch (...) { + jclass exClass = env->FindClass("java/lang/RuntimeException"); + if (exClass != nullptr) { + env->ThrowNew(exClass, "Native exception: caught unknown exception"); + } + } } SHERPA_ONNX_EXTERN_C @@ -173,11 +185,23 @@ JNIEXPORT bool JNICALL Java_com_k2fsa_sherpa_onnx_Vad_isSpeechDetected( } SHERPA_ONNX_EXTERN_C -JNIEXPORT void JNICALL Java_com_k2fsa_sherpa_onnx_Vad_reset(JNIEnv * /*env*/, +JNIEXPORT void JNICALL Java_com_k2fsa_sherpa_onnx_Vad_reset(JNIEnv *env, jobject /*obj*/, jlong ptr) { - auto model = reinterpret_cast(ptr); - model->Reset(); + try { + auto model = reinterpret_cast(ptr); + model->Reset(); + } catch (const std::exception& e) { + jclass exClass = env->FindClass("java/lang/RuntimeException"); + if (exClass != nullptr) { + env->ThrowNew(exClass, e.what()); + } + } catch (...) { + jclass exClass = env->FindClass("java/lang/RuntimeException"); + if (exClass != nullptr) { + env->ThrowNew(exClass, "Native exception: caught unknown exception"); + } + } } SHERPA_ONNX_EXTERN_C