在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过程的更多相关文章

  1. lua调用java java调用lua[转载]

    转载:http://dualface.github.io/blog/2013/01/01/call-java-from-lua/LuaJavaBridge - Lua 与 Java 互操作的简单解决方 ...

  2. Android平台下使用lua调用Java代码经验总结

    动态语言以其执行的灵活性,可配置性.方便调试能够为开发带来极大的方便.假设用好了.能够极大的提高开发的效率. 怪不得像游戏开发这样复杂的软件开发里没有不集成脚本语言的. 当中,lua以其小巧,灵活.方 ...

  3. LuaJavaBridge - Lua 与 Java 互操作的简单解决方案

    http://dualface.github.io/blog/2013/01/01/call-java-from-lua/ 最近在游戏里要集成中国移动的 SDK,而这些 SDK 都是用 Java 编写 ...

  4. LuaJavaBridge - lua与java互操作的简单解决方案

    引入:Android平台代码和Lua代码的交互均通过C++和Java交互,Lua再和C++交互(lua  <==> C++ <==> java) 我最开始遇见这种lua调用ja ...

  5. oracle调用JAVA类的方法

    导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了,  1.操作系统需要拥有支持loadjava命令的jdk.  2.加 ...

  6. Lua 调用 Opencv 的方法

    Lua 调用 Opencv 的方法 最近想用 Lua 调用 Opencv 进行相关像素级操作,如:bitwise_and 或者 bitwise_or,从而完成图像 IoU 的计算. 那么,怎么用 Lu ...

  7. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  8. 在ORACLE触发器里调用JAVA程序

    因为项目需要,有一个已经写好的Java程序,想要在Oracle某个表的触发器中调用,以使得每次数据更新时,调用这个JAVA程序,来修改后台某个数据. 现将过程记录如下: 1.编写JAVA程序 publ ...

  9. Oracle触发器反向调用Java程序

    导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了, 1.操作系统需要拥有支持loadjava命令的jdk. 2.加载j ...

随机推荐

  1. 5G时代的智慧物流~圆通副总裁相峰

        图片来自“百度百科”   本文是圆通速递CEO.国家工程实验室主任相峰先生在2019全球物流技术大会的演讲,在演讲中,相峰先生主要阐述了自己对5G的看法以及5G在物流领域的应用.   以下是演 ...

  2. 黑马学习SpringMVC 基本开发步骤

  3. Domination

    题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline ll read(){ , f ...

  4. 启动Eclipse时,出现 “Failed to load the JNI shared library "C:\Program Files\java\jdk1.7.....\jvm.dll"

    原因1:给定目录下jvm.dll不存在. 解决方法:(1)重新安装jre或者jdk并配置好环境变量. (2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本 ...

  5. CentOS yum源的配置

    yum操作 1.用YUM安装软件包命令:yum install 2.用YUM删除软件包命令:yum remove 3.使用YUM查找软件包命令:yum search4.列出所有可安装的软件包命令:yu ...

  6. xxe漏洞分析

    xxe漏洞总结 xxe漏洞就是xml外部实体注入攻击,所以一定是针对xml编写的服务. xxe漏洞是把参数经过php输入流或者$HTTP_RAW_POST_DATA直接读入xml实体当中,参数可控且没 ...

  7. java.lang.UnsupportedOperationException: setXIncludeAware is not supported on this JAXP implementation or earlier: class gnu.xml.dom.JAXPFactory的解决办法(图文详解)

    不多说,直接上干货! 问题详情 java.lang.UnsupportedOperationException: setXIncludeAware is not supported on this J ...

  8. JsonModel&AFNetWorking

    // HttpManager.h // JsonModel&AFNetWorking // // Created by qianfeng on 15/7/21. // Copyright (c ...

  9. 安卓下对SD卡文件的读写

    为SD下的操作文件,封装了一些类: package ujs.javawritedata; import java.io.File; import java.io.FileInputStream; im ...

  10. jeecg308自定义使用getDataGridReturn方法分页失效问题

    DataGrid dataGrid = new DataGrid(); dataGrid.setPage(p); dataGrid.setRows(r); dataGrid.setOrder(&quo ...