Cocos2d C++中调用Java方法
2017-09-27 16:54
405 查看
下面这个类由C++调用, 显示提示框
/**
* 这个类由C++调用
* @author skymr
*
*/
public class JavaCall {
/**
* 显示提示框
* @param content 提示内容
*/
public static void showAlert(String content){
Log.d("aaaa", content);
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putString("content", content);
bundle.putString("type", "1");
msg.setData(bundle);
AppActivity.HANDLER.sendMessage(msg);
}
}
因为C++调用 Java的执行线程不在主线程中,所以由Handler传递消息到主线程,由它来处理这个消息并显示
Handler在AppActivity中声明的
public static Handler HANDLER = null;
private static Context CONTEXT = null;
static{
HANDLER = new Handler(){
@Override
public void handleMessage(Message msg) {
Bundle data = msg.getData();
String type = data.getString("type");
if("1".equals(type)){
String content = data.getString("content");
Toast.makeText(CONTEXT, content, Toast.LENGTH_SHORT).show();
}
}
};
}
public AppActivity(){
CONTEXT = this;
System.out.println("aaaaaaaaaaaaaaaaaaaaaa");
}
C++部分, 注意要引入头文件 #include "platform/android/jni/JniHelper.h"
#ifndef __HELLO__
#define __HELLO__
#include "cocos2d.h"
#include "scripting/lua-bindings/manual/CCLuaEngine.h"
#include "platform/android/jni/JniHelper.h"
namespace cocos2d
{
class Hello: public Ref
{
public:
virtual bool init(){
return true;
}
CREATE_FUNC(Hello);
//调用java方法
virtual void callJavaFunc(){
JniMethodInfo minfo;
bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/skymr/learn/JavaCall","showAlert","(Ljava/lang/String;)V");
if (isHave){
jstring jstr = minfo.env->NewStringUTF("c++ call java");
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,jstr,2000);
minfo.env->DeleteLocalRef(minfo.classID);
}
else{
CCLOG("func is not exited...");
}
};
void sayHello(){
log("Hello Cocos Lua...");
//调用java方法
callJavaFunc();
callLuaFunc();
}
virtual void callLuaFunc(){
auto engine = LuaEngine::getInstance();
engine->executeScriptFile("test.lua");
};
Hello(){};
~Hello(){};
};
};
#endif
运行结果:
/**
* 这个类由C++调用
* @author skymr
*
*/
public class JavaCall {
/**
* 显示提示框
* @param content 提示内容
*/
public static void showAlert(String content){
Log.d("aaaa", content);
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putString("content", content);
bundle.putString("type", "1");
msg.setData(bundle);
AppActivity.HANDLER.sendMessage(msg);
}
}
因为C++调用 Java的执行线程不在主线程中,所以由Handler传递消息到主线程,由它来处理这个消息并显示
Handler在AppActivity中声明的
public static Handler HANDLER = null;
private static Context CONTEXT = null;
static{
HANDLER = new Handler(){
@Override
public void handleMessage(Message msg) {
Bundle data = msg.getData();
String type = data.getString("type");
if("1".equals(type)){
String content = data.getString("content");
Toast.makeText(CONTEXT, content, Toast.LENGTH_SHORT).show();
}
}
};
}
public AppActivity(){
CONTEXT = this;
System.out.println("aaaaaaaaaaaaaaaaaaaaaa");
}
C++部分, 注意要引入头文件 #include "platform/android/jni/JniHelper.h"
#ifndef __HELLO__
#define __HELLO__
#include "cocos2d.h"
#include "scripting/lua-bindings/manual/CCLuaEngine.h"
#include "platform/android/jni/JniHelper.h"
namespace cocos2d
{
class Hello: public Ref
{
public:
virtual bool init(){
return true;
}
CREATE_FUNC(Hello);
//调用java方法
virtual void callJavaFunc(){
JniMethodInfo minfo;
bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/skymr/learn/JavaCall","showAlert","(Ljava/lang/String;)V");
if (isHave){
jstring jstr = minfo.env->NewStringUTF("c++ call java");
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,jstr,2000);
minfo.env->DeleteLocalRef(minfo.classID);
}
else{
CCLOG("func is not exited...");
}
};
void sayHello(){
log("Hello Cocos Lua...");
//调用java方法
callJavaFunc();
callLuaFunc();
}
virtual void callLuaFunc(){
auto engine = LuaEngine::getInstance();
engine->executeScriptFile("test.lua");
};
Hello(){};
~Hello(){};
};
};
#endif
运行结果:
相关文章推荐
- cocos2d-html5 javascript 通过C++绑定,调用java方法
- cocos2d 中使用jni Java 调用 C++ 方法
- 【cocos2d-x】C++中调用JAVA的方法
- cocos2d-x使用jni java调用c++方法(java 调 c++)
- Cocos2d-x学习记录 -- Java调用C++方法
- Cocos2D-X中在C++中调用JAVA的方法
- cocos2d 中使用jni Java 调用 C++ 方法
- cocos2d 中使用jni C++ 调用 Java 方法
- cocos2d-html5 javascript 通过C++绑定,调用java方法
- 3Java程序JNI调用C++之修改属性调用方法
- C++和Java的属性访问和方法调用 效率比较
- JAVA如何调用C/C++方法
- cocos2d-x项目调用当前函数中c++方法替代objc selector
- Android 在JNI中执行Java方法--C/C++调用Java
- 如何在C/C++中调用Java的方法
- c++调用java时得到java签名的方法javap -s -p <classname>
- C++ 代码创建虚拟机调用java方法
- Android 中Java 和C/C++的相互调用方法
- 调用外部DLL,如:DelphiC++Java的DLL的调用方法,给出代码片段?
- 如何在C/C++中调用Java的方法