cocos2d-x调用java中非静态方法以及静态方法注意事项以及示例

//如果需要调用一个类里边的非静态方法需要将类的实例取出来,然后用作classID
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台    JniMethodInfo minfo;//定义Jni函数信息结构体    //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数    bool isHaveObj = JniHelper::getStaticMethodInfo(minfo,"com/ming/mygame/MyGame","rtnActivity", "()Ljava/lang/Object;”); //在这里要注意返回类型的写法    jobject jobj;    if (isHaveObj) {        jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);    }    //这里就是非静态方法的调用    JniMethodInfo methodInfo;    bool isHaveMethod = JniHelper::getMethodInfo(methodInfo,"com/ming/mygame/MyGame","showMessage","()V");    if (isHaveMethod) {        methodInfo.env->CallVoidMethod(jobj,methodInfo.methodID);    } #endif

//一下即为测试代码中用到的java(Android代码)
//MyGame.java
package com.ming.mygame;

import org.cocos2dx.lib.Cocos2dxActivity;
import org.cocos2dx.lib.Cocos2dxGLSurfaceView;

import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class MyGame extends Cocos2dxActivity{
    
     private static MyGame context;
     private static Handler mHandler;
    protected void onCreate(Bundle savedInstanceState){
          super.onCreate(savedInstanceState);    
          context = this;
        
          mHandler = new Handler(){
               @Override
               public void handleMessage(Message msg) {
                    super.handleMessage(msg);
                    switch (msg.what) {
                    case 0:
                         break;
                    case 1:
                         AlertDialog.Builder builder = new Builder(MyGame.this);
                         builder.setMessage("这是C++调用java代码弹出的对话框");
                         builder.setTitle("C++调用java");
                         builder.setPositiveButton("确认", new OnClickListener() {
                             
                              @Override
                              public void onClick(DialogInterface dialog, int which) {
                                  
                              }
                         });
                        
                         builder.setNegativeButton("取消", new OnClickListener() {
                             
                              @Override
                              public void onClick(DialogInterface dialog, int which) {
                                  
                              }
                         });
                         builder.create().show();
                         break;
                    }
               }
          };
     }

public Cocos2dxGLSurfaceView onCreateView() {
         Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
         // MyGame should create stencil buffer
         glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
        
         return glSurfaceView;
    }
   
    public static void testFun() {
        //这里是静态方法测试
        mHandler.sendEmptyMessage(0);
    }
   
    public void showMessage() {
runOnUiThread(new Runnable() { @Override public void run() { AlertDialog.Builder builder = new Builder(MyGame.this); builder.setMessage("这是C++调用java代码弹出的对话框"); builder.setTitle("C++调用java"); builder.setPositiveButton("确认", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.create().show(); } });
     }
   
    public static Object rtnActivity() {
          return context;
     }

static {
        System.loadLibrary("cocos2dcpp");
    }
}

cocos2d-x调用java中非静态方法以及静态方法注意事项以及示例,布布扣,bubuko.com

时间: 2024-10-20 07:57:58

cocos2d-x调用java中非静态方法以及静态方法注意事项以及示例的相关文章

JniHelper调用java静态和非静态方法总结(即cocos2dx中调用android平台下显示第三方广告)

调用非静态方法首先就是调用的静态方法得到要调用的java的类对象然后通过调用minfo.env->CallVoidMethod(activityObj, minfo.methodID);方法把对象和要调用的方法以及参数(如果有 )传递个java类对象中的非静态方法: java类: // c++中調用的方法public static Object rtnActivity() {System.out.println("----------rtnActivity");return ma

入门: 使用JNI 从C++代码中调用Java的静态方法

开发环境: 操作系统: (uname -a output)  Linux ubuntu 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux JDK 版本 : (java -version) java version "1.7.0_51"OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubun

java中父类的静态方法不能被重写

Java中父类的静态方法确实不能被重写的,但是有的人可能去做实验发现在子类中去重写父类static方法时,并没什么问题.这里我来具体解释下. public class Parent { public static void add(){   System.out.println("=========Parent");}} public class Children extends Parent { public static void add(){   System.out.print

浅谈Java的默认和静态方法

目录 浅谈Java的默认和静态方法 Java新增默认方法有啥用 Java新增的静态方法有啥用 浅谈Java的默认和静态方法 允许在接口中声明默认方法和静态方法,是JDK1.8新增的特性.存在即合理,两者的出现,让接口越来越像抽象类(关于两者之别下一篇做总结),那么它们为什么出现呢,它们的出现产生了哪些便利,Java小白开始学习并总结,不足之处,还望评论区指点一二! Java新增默认方法有啥用 官方解答:默认方法允许您添加新的功能到现有库的接口中,并能确保与采用旧版本接口编写的代码的二进制兼容性.

cocos js js java互调 (如何在ANDROID平台上使用JS直接调用JAVA)

在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法.它的使用方法很简单: var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...) 在callStaticMethod方法中,我们通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回

基于 Android NDK 的学习之旅----- C调用Java

http://www.cnblogs.com/luxiaofeng54/archive/2011/08/17/2142000.html 基于 Android NDK 的学习之旅----- C调用Java许多成熟的C引擎要移植到Android 平台上使用 , 一般都会 提供 一些接口, 让Android sdk 和 jdk 实现. 下文将会介绍 C 如何 通过 JNI 层调用 Java 的静态和非静态方法. 1.主要流程 1.  新建一个测试类TestProvider.java a)       

如何在android平台上使用js直接调用Java方法[转]

转载自:http://www.cocos.com/docs/html5/v3/reflection/zh.html #如何在android平台上使用js直接调用Java方法 在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法.它的使用方法很简单: var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parame

【cocos2d-js官方文档】二十四、如何在android平台上使用js直接调用Java方法

在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法.它的使用方法很简单: var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...) 在callStaticMethod方法中,我们通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回

Esper调用Java代码执行系统命令

Esper语言是可以调用高级语言的静态方法的: 以调用Java的静态方法执行系统命令为例: select Runtime.getRuntime().exec(\"calc\"),avg(price) from " + product + ".win:length_batch(3) 完整代码可以参考如下链接: http://blog.csdn.net/luonanqin/article/details/9900295