Java 用Cocos2dxLuaJavaBridge调lua问题

java中:
public static void callbackLua(final String tipInfo,final int luaFunc){
Log.v("Test", "num1=");//System.out.println("luaFunc = " + luaFunc);
try
{
Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFunc, "success");//这句出异常
Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFunc);
}
catch(Exception e)
{
Log.i("test", e.getMessage());//安卓机打印不出logcat
}
//Cocos2dxLuaJavaBridge.callLuaGlobalFunctionWithString(luaFunc,"globalsuccess");
}
///////////////////////////////////////
lua中:
--java调lua

ccLabel:setString("PLATFORM_OS_ANDROID")
local function callbackLua(param)
if "success" == param then
--print("java call back success")
ccLabel:setString("java call back success")
else
ccLabel:setString("other")
end
end
args = {"callbacklua",callbackLua}
sigs = "(Ljava/lang/String;I)V"
local luaj = require "luaj"
local className = "org/cocos2dx/lua/LuaJavaBridgeTest"
ok,ret = luaj.callStaticMethod(className,"callbackLua",args,sigs)
if not ok then
--print("call callback error")
ccLabel:setString("call callback error = " ..tostring(ret))
else
ccLabel:setString("call callback success = " ..tostring(ret))
end
--]]
这个是lua的test复制下来的 用lua调java没问题 只是java调lua函数出问题

Cocos2dxLuaJavaBridge.callLuaGlobalFunctionWithString(luaFunc,"globalsuccess")

这里的luaFunc要定义成全局函数 如

function luaFunc(param)

if "globalsuccess" == param then

print("java成功调用lua")

end

end

我也遇到这问题了,请大神支招 :6:

请问楼主解决这个问题了吗?能不能麻烦告诉我一下解决方案呢?跪谢!!!

这个问题在quick之前的文档里是有说明的(话说quick的文档越来越不齐的样子。。。)

java call lua出错的原因是 android 下cocos运行环境是在GLThread, 楼主调用lua的函数是在android什么线程下调用的?

Cocos2dxActivity有提供runOnGLThread 方法, 你在android环境下找到主activity ,调用runOnGLThread 来call lua才是正确的姿势

我在lua调java时都出问题 : :0: attempt to index global ‘LuaJavaBridge’ (a nil value)
有没兄弟能给个正解

搞了半天是不能在电脑上跑,在手机上跑就可以了,请无视我上面的问题

@brad_chem 我在GL线程中调用也不行,麻烦大大们帮我看看吧,这个问题调了一天了,:6:,直接用的demo,都报错,无语了啊。
package org.cocos2dx.lua_tests;

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

import android.os.Bundle;

import com.cocos2dx.sample.LuaJavaBridgeTest.LuaJavaBridgeTest;

public class AppActivity extends Cocos2dxActivity{

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

public Cocos2dxGLSurfaceView onCreateView() {
    Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
    // Tests should create stencil buffer
    glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
    
    return glSurfaceView;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    
    LuaJavaBridgeTest.setContent(this);
}

}

package com.cocos2dx.sample.LuaJavaBridgeTest;

import org.cocos2dx.lib.Cocos2dxActivity;
import org.cocos2dx.lib.Cocos2dxLuaJavaBridge;

public class LuaJavaBridgeTest
{
static Cocos2dxActivity mActivity;
public static void setContent(Cocos2dxActivity context){
mActivity = context;
}
public static int addTwoNumbers(final int num1,final int num2){
return num1 + num2;
}

public static void callbackLua(final String tipInfo,final int luaFunc){
    System.out.println("wei    luaFunc    ....   "+luaFunc);
    mActivity.runOnGLThread(new Runnable() {
        
        @Override
        public void run() {
            // TODO Auto-generated method stub
            Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFunc, "success");
            Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFunc);
        }
    });
    
}

}

luaFunc你从哪里来的?
callLuaFunctionWithString 是lua调用java后传递一个luaFunc给java,做完工作后回调。 如果是异步处理,还需要retain luaFunc

如果你是java直接调用lua函数,只能调用lua全局func,用callLuaGlobalFunctionWithString

之前廖大的文档是写得很详细的。。

我是 Lua先调用了一下java,并且将functionId传入java,在java中打印functionId是正确的,再进行java回掉Lua,这时候就报错了。我这个用的是3.3rc0 的demo,进行编译,运行,最后也报这个错误。看android.mk,这个类被编译进so了啊,还是找不到Cocos2dxLuaJavaBridge这个类中的四个方法。难道是我哪里配置错了吗?

历经这么久终于解决这个问题了,这个问题出现的原因是 cocos2dx 3.3 rc0 的问题,在rc1及以后,这个问题已经解决了。。。。:6:

最近在做googleplay支付的sdk 在购买成功 回调自己的服务器时出现了java调用lua代码无效的情况 现在把代码贴出来 希望得到大家的指点:
myAppActivity.runOnGLThread(new Runnable()
{
public void run()
{
if (json != null)
{
Cocos2dxLuaJavaBridge.callLuaGlobalFunctionWithString(“BuyItem”,json);

            }    
        }
    });
myAppActivity.runOnGLThread(new Runnable()
    {
        public void run()
        {    
            if (json != null)
            {    
                Cocos2dxLuaJavaBridge.callLuaGlobalFunctionWithString("BuyItem",json);
                
            }    
        }
    });

从零开始填坑了,我也遇到这个问题。唉,跟其他平台做交互的时候 ,API真心难用啊。