JNIを使用してC++からJavaクラスのインスタンスメソッドを呼び出しています。 Javaのメソッドが返され、C++でこれをキャッチする必要があります。誰かが助けてくれますか?C++ JNIでJavaメソッドから返された<String>のセットを受け取る方法は、jobjectを<String>に変換できますか?
Javaメソッドは以下のようになります。
@Override
public Set<String> getRealmRights()
{
Set<String> realmRights = new HashSet<>();
-----------------
-----------------
return realmRights;
}
私は以下のようにC++からメソッドを呼び出しています。
jmethodID getRealmRightsMethodId = env->GetMethodID(keycloakAdapterApplicationClassId, "getRealmRights", "()Ljava/util/Set;");
if(getRealmRightsMethodId != nullptr)
{
jobject rights = (jobject) env->CallObjectMethod(keycloakAdapterApplication, getRealmRightsMethodId);
//@ this stage I want to read the information from jobject,Please help?
}
メソッドIDを正しく取得でき、メソッドを実行することもできます。
キャストジョブオブジェクトを設定しようとしましたが失敗しました。これを直接キャッチすることはできますか?それとも、私はjobjectをセットに変換できますか?
私はJava関数によって返された情報を印刷したいと思います。助けてください?
「キャッチする」_とはどういう意味ですか? 'Set'は' jarray'ではなく、 'jobject'です。セット内の要素にアクセスするには、たとえば次のようにします。あなたのJavaコードで 'toArray'を使って' Set 'の代わりに' String [] 'を返してください。なんらかの理由でJavaコードを変更できない場合は、C++( 'GetObjectClass'、' GetMethodID'、 'CallObjectMethod'など)から同じことをすることができます。 –
Michael
私はjobjectの情報を受け取りました。どうすればそれを読むことができますか教えてください。 jobjectは、タイプの値を保持しています。 –
kunal
あなたが呼び出す 'Set'メソッドのID(' toArray'など) 'Set'クラスへの参照を取得するために、私が言及した関数を使用して、そのメソッドを呼び出します。 'jobjectArray'を取得したら、それをいつものように処理します。これはすべて標準のJNIプログラミングです(https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.htmlを参照)。そのため、問題が何であるかが明確にはわかりません。 – Michael