我有一个在 C++ 上工作的项目,现在将它移植到使用 JNI 使用 java,所有计算仍然主要是在 C++ 中进行的,但现在它是用 Java 包装的,我偶然发现了一个问题,有一个 Java 对象我需要创建,但它依赖于一些计算,因为我在 C++ 中进行这些计算,所以我决定在 C++ 中完成这些计算之后创建该对象
JNI 工作正常,因为之前有多个调用,工作正常并且断点工作(Java 方法是从本机调用的)。
从 C++ 调用 Java
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的调用已执行,参数很好,但分配或构造函数调用从未发生,该应用程序不会抛出任何异常或错误,执行继续,但对象永远不会创建,请建议可能是这里的问题...