使用 JNI 从 cpp 调用 java 方法时出现异常
Exception while calling java method from cpp using JNI
我在尝试从 cpp 类调用 java 中的函数以在记忆中保存布尔值时收到以下错误。我正在使用一个名为MyAdapter的类.cpp来调用MyAdapterJni.cpp的函数。我有以下函数写在MyAdapterJni中.cpp
bool GetBooleanJni(const char *key, bool defaultValue)
{
cocos2d::JniMethodInfo methodInfo;
jboolean ret = false;
if (! getStaticMethodInfo(methodInfo, "GetBoolean", "(Ljava/lang/String;Z)Z"))
{
return ret;
}
ret = methodInfo.env->CallStaticBooleanMethod(methodInfo.classID, methodInfo.methodID, defaultValue);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
return ret;
}
我在 myManager .java 类中有以下功能
public static boolean GetBoolean(String key, boolean defaultValue)
{
return sharedPreferences.getBoolean(key, defaultValue);
}
我在我的日志猫上收到以下日志
12-14 12:06:32.024: W/dalvikvm(9575): 异常 Ljava/lang/NullPointerException; 初始化 Lcom/mygames/Game/MyManager 时抛出;
12-14 12:06:32.024:D/libMyManager(9575):找不到 GetBoolean 的静态方法 ID
我的java类在包com.mygames.Game中
任何人都可以告诉我可能导致此错误的原因
MyManager
的初始化会抛出一个NullPointerException
,这可能会阻止确定方法 id,所以你可能想看看它。请注意,不仅类初始值设定项可以抛出此字段,还可以初始化任何静态字段。您可以将所有初始化放入类初始值设定项中,然后从那里进行调试,必须有null
.
尝试获取运行此活动的实例(例如 cocos2dxActivity),并在 runonUiThread 中执行实现。
public static boolean GetBoolean(String key, boolean defaultValue) {
Cocos2dxActivity.getInstance().runOnUiThread(new Runnable() {
@Override
public void run() {
return sharedPreferences.getBoolean(key, defaultValue);
}
});
}
}
注意:它可能会在创建函数参数时给您带来一些错误。希望你理解,如果没有,请随时问...
我也遇到了这个问题,就我而言,在主 UI 线程上运行我的 Java 方法功能解决了我的问题。 例如,在您的 Java 方法中
Activity ac=(Activity) context;
ac.runOnUiThread(new Runnable()
{
public void run()
{
//your code here
}
});
相关文章:
- 处理多个异常集合的C++方法
- 引发异常的方法的命名约定 (C++)?
- 有没有更好的方法来处理异常? try-catch块真的很丑
- C++ 捕获异常后进行清理的标准方法是什么?
- 方法c++内部出现异常
- 有没有一种方法可以让OpenCLC++绑定为所有错误抛出异常
- 关于异常,覆盖标准异常方法
- 处理许多自定义异常的最佳方法是什么
- 抽象包装带有异常的 C 错误处理的最佳方法
- 提出异常并处理C 的某些异常类型的正确方法是什么?
- 在类中抛出异常的最佳方法是什么
- 构造函数中的异常:init() 方法、指针、大型 try/catch 或
- 引发异常后无法退出方法
- 如何在C++中显式调用异常抛出方法
- 推荐一种在未输入获取行分隔符时引发异常的方法?
- 无法捕获模板规范化方法引发的异常
- 创建自己的异常(2种方法)C
- C 向量异常处理:哪一种是抛出out_of_range()的更好方法以及原因
- 有没有一种方法可以判断程序正在抛出异常
- 异常处理+多态性,如果异常方法在同一类中不起作用,则不起作用