bugfix> c++ > 投稿

私はc ++とjniの新人です。 jintではなく、jobjectとしてJava例外を返す必要があります。 jobjectを返すメソッドがあります。そのため、ThrowNewを返そうとするとコンパイルエラーが発生します。

JNIEXPORT jobject JNICALL Java_com_my_get(JNIEnv* env, jobject obj) {
    some::SomeObject returnObject;
    try {
              //... trying to get returnObject by calling lib method
            returnObject = some::lib::getSomeObject();
          } catch (...) {
              // report problem back to Java.
              jclass Exception = env->FindClass("com/my/MyClientException");
              return env->ThrowNew(Exception, "Error");
          }
//... return returnObject mapped to jobject
}

Javaネイティブパーツ:

public native MyJavaObject get(); // need object or exception

コンパイルエラー:

error: invalid conversion from ‘jint’ {aka ‘int’} to ‘jobject’ {aka ‘_jobject*’} [-fpermissive]

これを行う方法?エラーが発生したときにメソッドを停止する必要があります。

回答 1 件
  • の結果を返そうとしないでください ThrowNew Javaに戻る。その戻り値は、呼び出しが成功したかどうかを示すだけです。のドキュメント ThrowNew 状態:

    RETURNS:

    Returns 0 on success; a negative value on failure.

    呼び出す ThrowNew ネイティブメソッドから戻ると、JVMの制御フローが例外ハンドラーに移動します。呼び出した後、必要な値を返します。値は無視されます。戻り値の型を持つメソッドの場合 jobject 、単に返す nullptr

       env->ThrowNew(Exception, "Error");
        return nullptr;
    
    

あなたの答え