lua调用java过程

Posted HemJohn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\",\n\t\"%s\",\n\targs,\n\t\"%s\"", className, methodName, sig)

    return callJavaStaticMethod(className, methodName, args, sig)

end

 

return luaj

 

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

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

 

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

 

以上是关于lua调用java过程的主要内容,如果未能解决你的问题,请参考以下文章

Java调用Lua(转)

lua能调用dll吗

在JAVA中使用LUA脚本记,javaj调用lua脚本的函数(转)

lua调用失败是啥意思

Java + Lua = 王炸!!

lua调用C语言