Cocos2d-x3.1通过JniHelper类调用java中非静态函数

1、创建Cocos2d-x3.1工程

在调用静态函数文章中有详细介绍。

2、将工程导入XCode

在调用静态函数的文章中有详细介绍

3、将工程导入ADT

在调用静态函数的文章中有详细介绍,遇到的错误及解决办法都有描述。

4、在Xcode中添加如下代码

通过修改关闭按钮实现静态与非静态代码的调用。在 void HelloWorld ::menuCloseCallback( Ref * pSender)添加如下代码:

void HelloWorld::menuCloseCallback(Ref* pSender)
{
//平台判断
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    JniMethodInfo info;
    //判断org/cocos2dx/cpp/AppActivity.java中是否存在getObj静态函数
    bool ret = JniHelper::getStaticMethodInfo(info,"org/cocos2dx/cpp/AppActivity","getObj","()Ljava/lang/Object;");
    jobject jobj;//用于存放返回的对象
    if(ret)
    {
        log("call void getObj() succeed");
        jobj = info.env->CallStaticObjectMethod(info.classID,info.methodID);//调用getObj函数,返回一个对象
    }
    //判断org/cocos2dx/cpp/AppActivity.java中是否存在func1非静态函数
    bool re = JniHelper::getMethodInfo(info,"org/cocos2dx/cpp/AppActivity","func1","()V");
    if(re)
    {
        log("call func1 succeed");
        info.env->CallVoidMethod(jobj,info.methodID);//通过返回的对象调用非静态函数
    }
    
#endif
}

5、在ADT中的src/org.cocos2dx.cpp下AppActivity.java中添加如下代码

public static Object getObj()
{
	Log.e("Static", "func");
	return instance;
}
private Intent i;
public void func1()
{
	Log.e("unStatic", "func1");
	i = new Intent(AppActivity.this,MyService.class);
	startService(i);
}

6、编译运行

如有问题翻看前面关于在Java中调用静态函数的文章。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值