Неустранимая ошибка JNI при вызове GetStringChars - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь написать нативную функцию для

protected static native boolean _connect(String user, String password,
                                         String machine) throws Exception;

Реализация выглядит так:

JNIEXPORT jboolean JNICALL Java_jniprint__1connect
(JNIEnv *env, jclass clazz, jstring _machine, jstring _user, jstring _pass)
{
cout << "Connecting !!!!!!!!" << endl;
const jchar *machine = env->GetStringChars(_machine, JNI_FALSE);    
cout << "after machine!!!!!!!!" << endl;
return JNI_FALSE;
}

Он отлично работает, когда параметр _machine не равен NULL, когда он равен NULL - jvm резко падает

 A fatal error has been detected by the Java Runtime Environment:  

  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d96019f, pid=16444, tid=10744  

 JRE version: 6.0_30-b12  
 Java VM: Java HotSpot(TM) Client VM (20.5-b03 mixed mode, sharing windows-x86 )  
 Problematic frame:  
 V  [jvm.dll+0xa019f]  

...

Что происходит?

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Вы удостоверились, что не передаете это нуль? РЕДАКТИРОВАТЬ: Извините за чтение неряшливый, вы пропускаете его ноль.В этом случае он ДОЛЖЕН аварийно завершиться.

Кроме того, вам следует вызвать ReleaseStringchars (), иначе будущие вызовы могут завершиться сбоем (или вызвать другие проблемы).

Редактировать: Запуск jvm с -Xcheck: jniчасто помогает при разработке с использованием JNI.Не уверен, что это поможет вам, но я все равно решил бросить это.

0 голосов
/ 16 июля 2014

Вы устанавливаете строку на стороне Java, равную нулю.Вы должны установить эту строку равной "".

...