• lua调用java过程


    在cocos2dx框架中,有继承好的luaj文件来方便我们去使用lua调用java底层代码,注意:luaj只能使用在安卓平台下,如果在平台下使用,会出错,

    所以使用前需要加平台判断,方法 如下:

    local luaj = require("src/cocos/cocos2d/luaj")--引入luaj库

    luaj.callStaticMethod("org/cocos2dx/lua/类文件名",方法名, {参数}, 签名)

    例如:

    在java中的text.java文件代码如下:

    void showText()

    {

      ....

    }

    lua调用代码

    luaj.callStaticMethod("org/cocos2dx/lua/test","showText",{}, "()V")传递参数需要通过table存储,没用参数可以写一个空的table,最后一个参数签名是确定传参数据类型和返回数据类型。

    签名中的“()”括号是填入参数类型,参数类型的签名可以打开luaj.lua文件查看,括号后的参数是返回类型。"V"是指没有返回类型,

    如果参数是布尔形,返回时布尔形,签名可以写成“(Z)Z”,

    贴出luaj.lua代码如下

    local luaj = {}

    local callJavaStaticMethod = LuaJavaBridge.callStaticMethod

    local function checkArguments(args, sig)

        if type(args) ~= "table" then args = {} end

        if sig then return args, sig end

        sig = {"("}

        for i, v in ipairs(args) do

            local t = type(v)

            if t == "number" then

                sig[#sig + 1] = "F"

            elseif t == "boolean" then

                sig[#sig + 1] = "Z"

            elseif t == "function" then

                sig[#sig + 1] = "I"

            else

                sig[#sig + 1] = "Ljava/lang/String;"

            end

        end

        sig[#sig + 1] = ")V"

        return args, table.concat(sig)

    end

    function luaj.callStaticMethod(className, methodName, args, sig)

        local args, sig = checkArguments(args, sig)

        --echoInfo("luaj.callStaticMethod("%s", "%s", args, "%s"", className, methodName, sig)

        return callJavaStaticMethod(className, methodName, args, sig)

    end

    return luaj

    从里面可以看到,如果传入签名为空,会自动生成一个签名,但要注意,lua中并没有整形的数据类型,如果java中接收的参数是整形,传入一个float类型的签名

    会出现错误,所以,如果要传入整形数据到java代码中,需要自己手动写入签名,整形的签名是“I”.

    转载请注明出处,from 博客园HemJohn

  • 相关阅读:
    python mysql操作
    常用sql语句总结
    python 正则表达式总结
    hdu 6199 dp
    hdu 6212 区间dp
    hdu 6214 割边最少的最小割
    2017沈阳网络赛G XOR 分块(分类讨论sqrt)
    HDU 6166 二进制分组
    hdu 6194 后缀数组
    hdu 6201 树分治
  • 原文地址:https://www.cnblogs.com/HemJohn/p/5250161.html
Copyright © 2020-2023  润新知