• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

依赖包(附件有下载): 

包名 类型 操作系统
luajava-1.1.jar jar ALL
libluajava-1.1.so .so linux
luajava-1.1.dll .dll windows



windows: 
将luajava-1.1.dll拷贝到java.libary.path目录(通过System.getProperty("java.library.path")可以知道) 

linux: 
将libluajava-1.1.so拷贝到java.libary.path目录(通过System.getProperty("java.library.path")可以知道) 

如果linux有问题,则按以下操作重新编译.so文件 

1.编译&安装Lua 
tar -zxvf lua-5.1.5.tar.gz 
cd lua-5.1.5 
make linux install 
注:64位系统需要先编辑src/Makefile,在CFLAGS上添加-fPIC。 

2.编译与安装Luajava 
tar -zxvf luajava-1.1.tar.gz 
cd luajava-1.1 
修改 config文件,添加JAVA_HOME=/broadtech/javaweb/jdk1.6.0_25 
make 

3.部署。 
将编译好的libluajava-1.1.so拷贝到java.libary.path目录(通过System.getProperty("java.library.path")可以知道), 
luajava-1.1.jar拷贝到$JAVA_HOME\jre\lib\ext目录 

4、重启项目 

注:LuaJava1.1缺少了JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger (JNIEnv * env , jobject jobj , jobject cptr , jint number) 方法的实现,编译前可编辑src/c/luajava.c加入以下代码实现再make 

C代码  
  1. /************************************************************************ 
  2. *   JNI Called function 
  3. *      Lua Exported Function 
  4. ************************************************************************/  
  5.    
  6. JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger  
  7.   (JNIEnv * env , jobject jobj , jobject cptr , jint number)  
  8. {  
  9.    lua_State * L = getStateFromCPtr( env , cptr );  
  10.    
  11.    lua_pushinteger( L, ( lua_Integer ) number );  
  12. }  



LuaUtil.java 

Java代码  
    1. /** 
    2.  * 调用Lua脚本 
    3.  * @author chamcon 
    4.  * @date 2013-11-07 15:58:48 
    5.  */  
    6. public class LuaUtil {  
    7.     public static List<String> PUBLIC_LUA_FILES = new ArrayList<String>();  
    8.     public static Logger logger = Logger.getLogger(LuaUtil.class);  
    9.       
    10.     static {  
    11.         //配置公共函数lua文件  
    12.         //PUBLIC_LUA_FILES.add("");  
    13.     }  
    14.       
    15.     /** 
    16.      * 执行Lua脚本 
    17.      */  
    18.     public static String execLuaFunc(String lua,String funcName,String value){  
    19.         //依赖库文件要放到java.library.path下  
    20.         logger.debug("java.library.path:"+System.getProperty("java.library.path"));  
    21.           
    22.         LuaState L = LuaStateFactory.newLuaState();  
    23.         // 加载lua标准库,否则一些lua基本函数无法使用  
    24.         L.openLibs();  
    25.           
    26.         //加载公共函数文件  
    27.         if(!PUBLIC_LUA_FILES.isEmpty()){  
    28.             for(int i=0;i<PUBLIC_LUA_FILES.size();i++){  
    29.                 L.LdoFile(PUBLIC_LUA_FILES.get(i));  
    30.             }  
    31.         }  
    32.           
    33.         //加载函数串  
    34.         L.LdoString(lua);  
    35.         //调用函数名  
    36.         L.getField(LuaState.LUA_GLOBALSINDEX, funcName);  
    37.         //设置参数  
    38.         L.pushString(value);  
    39.           
    40.         //调用  
    41.         L.call(11);  
    42.           
    43.         //设置返回对象  
    44.         L.setField(LuaState.LUA_GLOBALSINDEX, "RESULT");  
    45.         LuaObject lobj = L.getLuaObject("RESULT");  
    46.            
    47.         //获取返回值  
    48.         String res = lobj.getString();  
    49.         L.close();  
    50.   
    51.         if(res == nullreturn "";  
    52.         return res;  
    53.     }  
    54. }  

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua逻辑操作符发布时间:2022-07-22
下一篇:
LuaUserdata发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap