在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. 【并发编程】一文带你读懂深入理解Java内存模型(面试必备)

    并发编程这一块内容,是高级资深工程师必备知识点,25K起如果不懂并发编程,那基本到顶.但是并发编程内容庞杂,如何系统学习?本专题将会系统讲解并发编程的所有知识点,包括但不限于: 线程通信机制,深入JM ...

  2. js框架:vue

    vue是一套用于构建用户界面的渐进式框架,vue被设计为可以自底向上逐层应用,核心库只关注图层 待续.......

  3. WPF编译时提示"xxx不包含适合于入口点的静态 Main方法xxx"

    WPF编译时提示"xxx不包含适合于入口点的静态 Main方法xxx"生成的时候一直报"xxx不包含适合于入口点的静态 Main 方法xxx" 看到这个问题首先 ...

  4. Node.js 第三方包的安装、升级、卸载,以及包依赖管理

    本地安装: npm install package-name 全局全装: npm install -g  package-name 举个栗子 全局安装 React项目的脚手架 npm install ...

  5. CC08:翻转子串

    题目 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串.请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数. 给 ...

  6. NetCore1.1+Linux

    NetCore1.1+Linux部署初体验   1.环境准备 Centaos7+Win10 虚拟机 Win10安装VS2017 https://www.asp.net/downloads注意勾选下.N ...

  7. 关于Nginx对于PHP支持的问题

    因为使用的mediawiki是用php写的,所以就遇上了一个问题,怎么让Nginx支持php,记得当时使用apache2的时候是安装了一个叫 “ libapache2-mod-php5 ”的mod , ...

  8. csrf攻击实例

    CSRF 攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作.比如说,受害者 Bob 在银行有一笔存款,通过对银行的网站发送请求 ht ...

  9. CentOS 6.2安装配置LAMP服务器(Apache+PHP5+MySQL)

    准备篇:   1.配置防火墙,开启80端口.3306端口    vi /etc/sysconfig/iptables    -A INPUT -m state --state NEW -m tcp - ...

  10. 移动端之js控制rem,适配字体

    方法一:设置fontsize 按照iphone 5的适配  1em=10px    适配320 // “()()”表示自执行函数 (function (doc, win) { var docEl = ...