私はC++で動作するプロジェクトを持っています.JNIを使用してJavaを使用するように移植しています.すべての計算はまだほとんどC++で行われていますが、Javaでラップされています.問題に遭遇しました.Javaオブジェクトがあります.私は作成する必要がありますが、それはいくつかの計算に依存しており、C++ でそれらの計算を行うので、C++ でそれらの計算が行われた後にそのオブジェクトを作成することにしました。
以前に複数の呼び出しがあったため、JNI は問題なく動作し、正常に動作し、ブレークポイントが動作します (Java メソッドはネイティブから呼び出されます)。
Java は C++ から呼び出されます
C++:
//after computations, C++ calls this method to call Java
extern "C"
{
void CreateObject()
{
JNIEnv *jenv = GetJavaEnv();
static jmethodID jmethod = GetJavaMethod(l_this, jenv, "CreateObject", "()V");
jenv->CallVoidMethod(l_this,jmethod)
}
}
ジャワ
public class MainActivity
{
private MyObject myObject = null;
//lang and config are set from native by other calls, when i enter Create object,
//they look fine
private String lang = null;
public void CreateObject()
{
HashMap<AdConfigKey, String> config = new HashMap<AdConfigKey, String>();
config.put("my string1", "string1");
config.put("my string2", "string2");
config.put("my string3", "string3");
//at this point config looks fine, it's created and parameters are inside...
MyObject = new MyObject(this, config);
MyObject.setListener(this);
MyObject.setLanguage(lang);
}
}
問題は、Java への呼び出しが実行され、パラメーターは正常であるが、割り当てまたはコンストラクターの呼び出しが発生しないこと、アプリケーションが例外やエラーをスローしないこと、実行が続行されること、オブジェクトが作成されないことです。ここで問題になる...