내 JNI 코드는 을 외부 소스에서 받아 jstring jStr = env->NewStringUTF(src)
을 사용하여 String
으로 변환하고 jStr
결과를 상위 Java 계층에 전달합니다.JNI : Catch NewStringUTF 내부 예외
일부 입력 src
값은 (NewStringUTF
에 호출 이내) 다음과 같은 런타임 오류가 발생할 수 :
-
: 내가 할 수있는 "캐치"이
해 NewStingUTF 에러/예외 사용되는 방법의
A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xf8
A/art: art/runtime/java_vm_ext.cc:470] string: 'radio abcdefg ���� ����� ��� ����'
A/art: art/runtime/java_vm_ext.cc:470] input: '0x72 0x61 0x64 0x69 0x6f 0x20 0x62 0x72 0x65 0x73 0x6c 0x65 0x76 0x20 <0xf8> 0xe3 0xe9 0xe5 0x20 0xe1 0xf8 0xf1 0xec 0xe1 0x20 0xf7 0xe5 0xec 0x20 0xe4 0xf0 0xe7 0xec'
A/art: art/runtime/java_vm_ext.cc:470] in call to NewStringUTF
없음
NewStringUTF
호출 후에 if (env->ExceptionCheck() == JNI_TRUE)
을 배치하십시오.NewStringUTF
호출 후에 if (env->ExceptionOccurred())
을 배치합니다.NewStringUTF
에 대한 호출을 try...catch
블록으로 경계합니다.참고 : 문제는 (이 응용 프로그램을 충돌하지 않도록, 그 제어 미치는 영향에 의해), 그리고 유용 할 수 있지만 (그 해결에 반드시 예외을 잡기 에 초점을 맞추고).
저는 NDK v15.2와 함께 Android Studio v2.3.3 (최신 날짜)을 사용하고 있습니다.
귀하의 도움이 많이 필요합니다.
예외는 가정이 틀렸다는 것을 알려줍니다. –
아마도 강조되지 않았지만 문제는 ** 예외를 잡는 데 초점을 맞추고 있습니다. ** 또한 영향을 제어하여 응용 프로그램을 손상시키지 않습니다. 아마도 'NewStringUTF'에서 실행 된 하위 레벨 코드 때문에 충돌이 발생했을 가능성이 있습니까? – Bliss
문서 작성자는 문자열을 작성하는 중에 오류가 발생하면'NewStringUTF'가 NULL을 반환한다고 말합니다. 어쩌면 그게 전부입니다 : NULL을 확인하고 당신을 제외하고 아무도 볼 수없는 디버그 출력을 무시하십시오. – user2543253