精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何在Java中使用Lua腳本語言

移動開發 iOS
如何在Java中使用Lua腳本語言是本文要介紹的內容,主要是來學習LUA腳本語言在JAVA中如何來使用,Lua就不說了, 現在比較熱門,

如何在Java中使用Lua腳本語言是本文要介紹的內容,主要是來學習LUA腳本語言JAVA中如何來使用,Lua就不說了, 現在比較熱門, 語法也很簡單. 為了在Java中調用, 折騰了比較長的時間, 就把一些東西記在下面.來看詳細內容講解。

Lua是支持內嵌在C程序中的, 但是官方不支持Java. 在網上查了下, 有LuaJava開源庫, 拿來試用了一下, 發現這個庫還算比較完善的. 地址是

  1. http://www.keplerproject.org/luajava/ 

這個LuaJava實際上就是按照Lua官方文檔, 把Lua的C接口通過JNI包裝成Java的庫. 下載, 里面是一個.dll, 一個.jar. 把.dll放到java.library.path下, 再把.lib放到classpath中, helloworld運行OK.

但是, 測試的時候, 很快發現了第一個問題: 在調用LuaJava中提供的LuaState.pushInteger 方法的時候, 出現了錯誤 : Unsatisfied Link Error. 其他的LuaState.pushNumber方法倒是沒有問題. 用Depends工具看了下, 這個.dll居然沒有導出pushInteger這個函數. 暈....

下載LuaJava的源代碼, 查看了下Luajava.c 和 Luajava.h, 發現果然里面有點問題, 在.h里面定義了JNI中對應Java函數的C函數

JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger

但是.c中沒有實現這個函數. 無語, 看來大馬虎哪都有啊. 幸虧有源代碼, 照貓畫虎在Luajava.c中加上這個函數的實現,

  1. JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger  
  2.    (JNIEnv * env, jobject jobj, jobject cptr, jint i)  
  3. {  
  4.     lua_State * L = getStateFromCPtr( env , cptr );  
  5.     lua_pushinteger(L, i);  

然后編譯. 編譯也出現了問題了, 官方文檔中說可以用VC++來Build, 但是沒有說官方用的是什么版本. 我用VC2005就不行. 好在Luajava比較小, 就一個.h 一個 .c , 在VC中新建一個.dll項目, 把文件加進去, 修改一下build參數 (Include 需要加上lua的頭文件, lib中需要加上lua的.lib文件, 另外要選上 Compile as C Code (/TC) ) Build, 通過了.

這時再在Java中調用pushInteger方法就沒有問題了.

在測試中, 發現Luajava提供的文檔中, 對于Lua腳本怎么調用Java對象/方法很詳細, 但是在Java中怎么調用Lua函數/取得返回值 就沒有. 參考了http://www.lua.org/manual/5.1/manual.html#lua_CFunction 的Lua C文檔, 實現了傳遞對象到Lua中并取得返回值的代碼:

Test1: 測試傳遞簡單類型, 并取得返回值:

Lua 腳本(test.lua):

  1. function test(a,b)  
  2.     return a+b  
  3. end 

Java代碼:

  1. static {  
  2.         //加載Lua5.1.dll, 因為LuaJava最后還是要調用Lua的東西  
  3.         System.loadLibrary("lua5.1");  
  4.     }  
  5.       
  6.     public static void main(String[] argu) throws LuaException {  
  7.           
  8.         LuaState L = LuaStateFactory.newLuaState();  
  9.  
  10.         L.openLibs();  
  11.  
  12.         //讀入Lua腳本  
  13.         int error = L.LdoFile("test.lua");  
  14.         if (error != 0) {  
  15.             System.out.println("Read/Parse lua file error. Exit.");  
  16.             return;  
  17.         }   
  18.           
  19.         //找到函數test  
  20.         L.getField(LuaState.LUA_GLOBALSINDEX, "test");  
  21.         //參數1壓棧  
  22.         L.pushInteger(1);  
  23.         //參數2壓棧  
  24.         L.pushInteger(2);  
  25.         //調用!! 一共兩個參數, 1個返回值  
  26.         L.call(2, 1);  
  27.         //保存返回值, 到a中  
  28.         L.setField(LuaState.LUA_GLOBALSINDEX, "a");  
  29.         //讀入a  
  30.         LuaObject l = L.getLuaObject("a");  
  31.         //打印結果.  
  32.         System.out.println("Result is " + l.getString());  
  33.         L.close();  

測試2: 傳遞Java對象

  1. class Value {  
  2.     public int i;  
  3.     public void inc() {  
  4.         i++;  
  5.     }  
  6.     public int get() {  
  7.         return i;  
  8.     }  
  9.     public String toString() {  
  10.         return "Value is " + i;  
  11.     }  

Lua腳本: (該腳本中調用兩次對象的inc方法, 并調用get方法輸出結果)

  1. function test1(v)  
  2.     v:inc();  
  3.     v:inc();  
  4.     print("In lua: " .. v:get());  
  5.     return v  
  6. end 

Java 代碼: (前面都一樣, 略)

  1. //找到函數test1  
  2. L.getField(LuaState.LUA_GLOBALSINDEX, "test1");  
  3. //生成新的對象供測試  
  4. Value v = new Value();  
  5. //對象壓棧  
  6. L.pushObjectValue(v);  
  7. //調用函數test1, 此時1個參數, 1個返回值  
  8. L.call(1, 1);  
  9. //結果放在b中.  
  10. L.setField(LuaState.LUA_GLOBALSINDEX, "b");  
  11. LuaObject l = L.getLuaObject("b");  
  12. System.out.println("Result is " + l.getObject()); 

運行結果:

  1. Result is Value is 2  
  2. In lua: 2 

和預期的一致.

實現一個怪物的創建,把lua里的設定當作初始狀態傳給monstor,名字為sample monstor,防御10,攻擊10,生命100

1.先導入lib--luajava-1.1.jar

  1. import org.keplerproject.luajava.LuaState;  
  2. import org.keplerproject.luajava.LuaStateFactory;  
  3.  
  4. public class Load{  
  5. LuaState luaState;  
  6. /**  
  7. * Constructor  
  8. * @param fileName File name with Lua .  
  9. */  
  10. Load(final String fileName) {  
  11. this.luaState = LuaStateFactory.newLuaState();  
  12.  
  13. this.luaState.openLibs();  
  14.    this.luaState.LdoFile(fileName);  
  15.  
  16. }  
  17. /**  
  18. * Ends the use of Lua environment.  
  19. */  
  20. void close() {  
  21. this.luaState.close();  
  22. }  
  23. /**  
  24. * Call a Lua inside the Lua to insert  
  25. * data into a Java object passed as parameter  
  26. * @param Name Name of Lua .  
  27. * @param obj A Java object.  
  28. */  
  29. void run(String Name, Object obj) {  
  30. this.luaState.getGlobal(Name);  
  31. this.luaState.pushJavaObject(obj);  
  32. this.luaState.call(1,0);  
  33. }  
  34. }  
  35.  
  36. public class Monster{  
  37. /* Info */  
  38. protected String race;  
  39. protected int defense;  
  40. protected int attack;  
  41. protected int life;  
  42. /* */  
  43. private Load ;  
  44. public Monster(String race) {  
  45. /* Loads Lua for this race.*/  
  46. this. = new Load(race+".lua");  
  47. /*Call Lua create .*/  
  48. .run("create", this);  
  49. }  
  50.  
  51. public void setRace(String race) {  
  52.    this.race = race;  
  53. }  
  54. public String getRace() {  
  55. return race;  
  56. }  
  57. public int getDefense() {  
  58. return this.defense;  
  59. }  
  60. public void setDefense(int defense) {  
  61. this.defense = defense;  
  62. }  
  63. public int getLife() {  
  64. return this.life;  
  65. }  
  66. public void setLife(int life) {  
  67. this.life = life;  
  68. }  
  69. public void setAttack(int attack) {  
  70. this.attack = attack;  
  71. }  
  72. public int getAttack() {  
  73. return this.attack;  
  74. }  
  75. }  
  76.  
  77. monstor.lua---  
  78.  
  79. create(monster)  
  80. monster:setRace("Sample Monster")  
  81. monster:setDefense(10)  
  82. monster:setAttack(10)  
  83. monster:setLife(100)  
  84. end 

但總是拋出這個錯誤:

  1. PANIC: unprotected error in call to Lua API (Invalid method call. No such method.) 

不知為何,以后用到的時候再research.

已經查出來,原來在Monster類中少了個方法:

  1. public void setRace(String race) {  
  2.    this.race = race;  

怪不得會找不到,

要在一lua文件a.lua里導入其他的lua文件b.lua,用require "b"

如果要從lua中運算后得到返回參數,則需要做一下修改:在lua文件中改成:

  1. create(monster)  
  2. monster:setRace("Sample Monster")  
  3. monster:setDefense(10)  
  4. monster:setAttack(10)  
  5. monster:setLife(100)  
  6. return monster  
  7. end 

在Load.java中的run改成如下:

  1. void run(String Name, Object obj) {  
  2.    this.luaState.getGlobal(Name);  
  3.    this.luaState.pushJavaObject(obj);  
  4.    this.luaState.call(1, 1);// 一個參數,0個返回   
  5.    try {  
  6.     Object object =luaState.getObjectFromUserdata(1);  
  7.    } catch (LuaException e) {  
  8.     e.printStackTrace();  
  9.    }  

小結:如何在Java中使用Lua腳本語言的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-08-23 09:56:52

UnicodeLua

2011-08-25 13:22:40

CEGUILua腳本

2011-08-23 09:44:28

LUA腳本

2011-09-07 09:51:27

Javascript

2010-07-01 09:29:15

Java腳本語言javax.scrip

2011-08-22 18:00:53

Lua語言

2011-08-22 16:59:28

Lua

2011-08-25 11:02:04

2011-08-25 10:40:21

Lua游戲

2011-08-22 17:41:23

LUA 腳本 語言

2011-08-22 18:08:09

Lua腳本

2022-11-23 08:14:42

bash 腳本test 命令

2011-08-24 13:32:17

2011-06-22 14:07:42

Lua

2021-03-14 09:28:24

Linux Shell腳本

2022-12-22 20:47:01

腳本循環結構

2022-10-09 10:18:44

LinuxShell腳本

2021-09-10 10:30:22

Java代碼

2023-04-04 07:52:26

RedisLua腳本

2023-01-28 17:41:07

Java代碼
點贊
收藏

51CTO技術棧公眾號

在线观看特色大片免费视频| 又骚又黄的视频| 成人动漫视频| 欧洲一区二区三区免费视频| 一区二区视频国产| 国内精品偷拍视频| 亚洲一区二区三区高清| 中文字幕亚洲欧美在线| 性生交大片免费看l| 热色播在线视频| 国产精品久久久久久久久图文区| 97视频中文字幕| 极品国产91在线网站| 亚洲综合色网| 亚洲欧美综合精品久久成人| 91插插插影院| 成人在线爆射| 午夜日韩在线观看| 亚洲一区三区| 女人偷人在线视频| 国产激情精品久久久第一区二区 | 国产午夜精品一区理论片| 韩国理伦片一区二区三区在线播放| 97精品国产97久久久久久春色| 亚洲色图 激情小说| 欧美成人基地| 精品欧美黑人一区二区三区| 亚洲xxxx2d动漫1| 忘忧草在线影院两性视频| 一区二区视频在线看| 色涩成人影视在线播放| 视频在线观看你懂的| 国产成a人亚洲精| 成人午夜高潮视频| 中文字幕乱码无码人妻系列蜜桃| 国产精品婷婷| 国精产品一区一区三区有限在线| 亚洲天堂黄色片| 欧美亚洲国产激情| 国产亚洲免费的视频看| www.久久国产| 欧美成a人免费观看久久| 精品盗摄一区二区三区| 中文字幕avav| 欧美片网站免费| 欧美一区二区三区日韩视频| 日韩久久一级片| 三级在线观看视频| 姬川优奈aav一区二区| 99影视tv| 国产手机视频在线| 韩国av一区二区| 国产精品久久久久一区二区| 亚洲男人第一av| 亚洲成色精品| 久久色免费在线视频| 日本成人午夜影院| 极品美女一区二区三区| 精品视频在线播放| 欧美精品黑人猛交高潮| 国产在线播放精品| 欧美三级在线看| 日本精品免费在线观看| www.xxxx日本| 伊人久久大香线蕉无限次| 日韩视频中午一区| 久久久久久三级| 欧洲成人一区| 欧美性猛交xxxx黑人交| 国产精品人人妻人人爽人人牛| 欧美男男激情videos| 一区二区三区精品在线| 久久av喷吹av高潮av| 国内外激情在线| 亚洲欧美激情插| 糖心vlog在线免费观看| 91高清在线观看视频| 亚洲欧洲美洲综合色网| 一区二区三区日韩视频| 18在线观看的| 亚洲午夜久久久久中文字幕久| 丁香色欲久久久久久综合网| 欧洲精品二区| 午夜精品一区二区三区三上悠亚| 给我免费播放片在线观看| 男人添女人下部高潮视频在线观看| 亚洲精品水蜜桃| 国内精品视频一区二区三区| 青草视频在线免费直播| 亚洲成人av一区二区三区| 国产av天堂无码一区二区三区| 国产高清自产拍av在线| 色婷婷综合中文久久一本| 91免费视频网站在线观看| 欧美极度另类| 91精品国产色综合久久不卡电影 | 8av国产精品爽爽ⅴa在线观看 | 亚洲乱码一区二区三区| 黄色片网站在线| 无码av免费一区二区三区试看| 欧美成人xxxxx| 精品国产美女a久久9999| 在线播放/欧美激情| 波多野结衣三级视频| 欧洲亚洲一区二区三区| 伊人青青综合网站| 色在线观看视频| 99香蕉国产精品偷在线观看| 国产成人精品在线视频| 一区二区www| 成人夜色视频网站在线观看| 久久精品国产理论片免费| a中文在线播放| 亚洲男人的天堂在线aⅴ视频| 国产va亚洲va在线va| 日韩高清中文字幕一区二区| 欧美一区二区三区视频免费播放| av免费观看不卡| 日韩在线二区| 97久久久久久| 国产精品人人爽| 26uuu国产电影一区二区| 超碰免费在线公开| 中文字幕在线视频久| 91精品在线免费| 国产黄色网址在线观看| 成人婷婷网色偷偷亚洲男人的天堂| 九九九久久国产免费| 99re国产在线| 国产91精品一区二区麻豆网站| 亚洲一区二区在线免费观看| 在线亚洲人成| 欧美成人a视频| www.4hu95.com四虎| 99在线精品视频在线观看| 国产日韩欧美综合| 可以在线观看的av| 亚洲成年人网站在线观看| 人人干人人干人人| 国产欧美日韩精品高清二区综合区| 欧美成人精品一区二区三区| 最近中文字幕在线观看视频| 成人免费视频一区二区| 一区不卡视频| 91国内外精品自在线播放| 日韩精品在线观看网站| 久久99久久99精品免费看小说| 美女国产精品| 精品久久久久久一区| 日本三级在线观看网站| 欧美日韩国产片| 1024手机在线观看你懂的| 噜噜爱69成人精品| 九九九九精品| 少妇视频在线观看| 欧美一区二区视频在线观看| 美国精品一区二区| 美女视频免费一区| 亚洲精品一区二| 成人亚洲综合| 中文字幕av一区中文字幕天堂 | 成年人的黄色片| 亚洲一本视频| 国产欧美一区二区视频| 国产探花在线观看| 日韩美一区二区三区| 免费一级特黄特色大片| 岛国av在线一区| 欧美一级免费播放| 欧美日韩一本| 欧美亚洲成人精品| 欧洲视频在线免费观看| 一本一道综合狠狠老| 男人操女人动态图| 石原莉奈一区二区三区在线观看| 免费av在线一区二区| 国产亚洲成av人片在线观看| 日韩av有码在线| 欧美一区二区三区不卡视频| av不卡免费电影| 久久久久免费精品| 区一区二视频| 91深夜福利视频| 欧美hdxxxxx| 欧美精品一区二区高清在线观看| 精品91久久久| 国产亚洲人成网站| 99九九99九九九99九他书对| 韩国精品一区二区三区| 久久精品美女| 欧美日韩视频免费看| 粗暴蹂躏中文一区二区三区| 国产 欧美 自拍| 欧美性猛交xxxx黑人| 黄色三级生活片| 国产伦精一区二区三区| 日韩精品一区二区三区四| 婷婷综合成人| 欧美一性一乱一交一视频| 国产主播福利在线| 日韩一区二区三区四区五区六区| 日韩黄色三级视频| 国产精品麻豆久久久| 苍井空张开腿实干12次| 久久久久国产精品一区三寸| 一卡二卡3卡四卡高清精品视频| 视频精品二区| 国产精品黄色av| 国产欧美久久久久久久久| 日韩精品高清在线| 国产精品美女一区| 色诱亚洲精品久久久久久| 日本一二三区在线观看| 91色porny| 男插女视频网站| 石原莉奈一区二区三区在线观看| 欧美交换配乱吟粗大25p| 成人性生交大片免费看96| 91豆花精品一区| 亚洲s色大片| 日韩大陆欧美高清视频区| 一卡二卡三卡在线| 色综合色综合色综合| 538精品在线观看| 国产午夜久久久久| 成人区人妻精品一区二| 久久se精品一区二区| 国产人妻777人伦精品hd| 日韩av久操| 日韩久久精品一区二区三区| eeuss鲁片一区二区三区| 国产精品老牛影院在线观看| 国产直播在线| 欧美男插女视频| 视频免费一区| 亚洲精品永久免费精品| 精品国产亚洲av麻豆| 欧美日韩性生活| 中文天堂在线视频| 色欧美88888久久久久久影院| 久久网中文字幕| 亚洲色图都市小说| 人与嘼交av免费| 久久免费午夜影院| v天堂中文在线| 大尺度一区二区| 国产精品自在自线| 国产一区欧美一区| jizzzz日本| 日韩1区2区日韩1区2区| 国产精品wwwww| 亚洲一区网站| 欧美激情 国产精品| 黑人一区二区| 特级黄色录像片| 国产精品啊啊啊| 污污污污污污www网站免费| 99国产精品一区二区| 亚洲高清在线观看一区| 精品少妇av| 亚洲精品一品区二品区三品区| 欧洲三级视频| 亚洲第一在线综合在线| 国产精品久久久久久久久久10秀| 亚洲va韩国va欧美va精四季| 欧美码中文字幕在线| 日韩电影大全在线观看| 精品72久久久久中文字幕| 欧洲一区二区在线| 欧美一区三区| 一个色的综合| 91综合视频| 天堂8在线天堂资源bt| 亚洲黄网站黄| 日本免费黄视频| 青青草精品视频| 中文字幕线观看| 国产91精品露脸国语对白| 岛国精品一区二区三区| 成人污污视频在线观看| 中文字幕在线播放视频| 久久免费国产精品| 免费黄色国产视频| 玉足女爽爽91| 中文字幕一区二区三区精品| 日本韩国一区二区三区视频| 做爰无遮挡三级| 精品国产乱码久久久久久久| 五月激情婷婷综合| 中文字幕日韩有码| 色www永久免费视频首页在线| 国内精品一区二区三区| 欧美私密网站| 国产精品视频永久免费播放| 国产一区一区| 欧美日韩在线一二三| 成人综合一区| youjizz.com在线观看| 午夜在线播放视频欧美| 国产原创精品在线| 成人福利视频网站| 国产精品久久久久久成人| 精品久久香蕉国产线看观看亚洲| 成人黄色三级视频| 欧美成人bangbros| av基地在线| 久久久久久国产精品三级玉女聊斋| 成人影院大全| 91传媒视频免费| 色135综合网| 国产视频九色蝌蚪| 韩国一区二区在线观看| 手机av免费看| 亚洲精品视频在线观看网站| 国产污污视频在线观看| 这里只有精品免费| av在线播放av| 91精品国产自产91精品| 中文成人在线| 欧美一区二区在线| 国产中文一区| 色播五月综合网| 97久久人人超碰caoprom| 亚洲免费在线看| 尤物视频免费观看| 精品国产一区二区三区不卡 | 玖玖玖国产精品| 欧美69精品久久久久久不卡| 久久久久久影视| 日韩欧美视频在线免费观看| 欧美一卡2卡3卡4卡| 成人亚洲综合天堂| 97视频在线免费观看| 狠狠一区二区三区| 无码毛片aaa在线| 美腿丝袜亚洲色图| 这里只有久久精品| 欧美日韩裸体免费视频| 精品人妻一区二区三区四区不卡 | 91丨九色丨蝌蚪丨对白| 国产香蕉一区二区三区在线视频| 99自拍视频在线观看| 国产99久久精品一区二区| 色天天色综合| 成人毛片一区二区| 成人sese在线| 久久久久久久久久91| 欧美一区二区视频网站| 天堂成人av| 3d动漫啪啪精品一区二区免费 | 韩国一级黄色录像| 在线精品视频一区二区三四| 亚洲欧美丝袜中文综合| 午夜伦理精品一区| 成人av婷婷| 91嫩草国产丨精品入口麻豆| 国产一区二区按摩在线观看| 亚洲一二三在线观看| 欧美日韩国产系列| 久草资源在线观看| 91亚洲精品在线观看| 手机在线一区二区三区| 日韩av加勒比| 一区二区在线观看免费| 国产福利第一视频| 欧美夫妻性生活视频| 成人中文字幕视频| 日本福利视频在线| 国产无一区二区| 波多野结衣激情视频| 中文字幕av一区中文字幕天堂 | 北条麻妃在线一区二区免费播放| 免费不卡av在线| 26uuu国产一区二区三区 | 欧美性做爰猛烈叫床潮| 亚洲乱亚洲乱妇| 亚洲综合自拍一区| 中文乱码免费一区二区三区下载| 中文字幕在线视频播放| 精品久久久香蕉免费精品视频| 日韩有码电影| 国产精品视频网址| 欧美日韩网址| 日本丰满少妇裸体自慰| 欧美日韩久久一区二区| 成人高清免费在线| 精品国产乱码久久久久久蜜柚| 亚洲尤物影院| 少妇视频在线播放| 日韩一区二区三区电影在线观看| 日本不卡网站| 日韩欧美一区二区视频在线播放 | 久久高清免费视频| 亚洲视频综合网| 久久精品九色| 国内自拍在线观看| 亚洲国产精品激情在线观看| 国产绳艺sm调教室论坛| 性日韩欧美在线视频| 成人影院在线|