windows7環境中java呼叫lua指令碼函式
阿新 • • 發佈:2019-02-06
最近lua這種語言比較火!該語言的設計目的是其設計目的是為了嵌入應用程式中,從而為應用程式提供靈活的擴充套件和定製功能。
我想說的是如何在Java下使用Lua以提高程式設計效率、增強你的程式可擴充套件性。
首先,要在Java上使用Lua指令碼,必須有關於Lua指令碼直譯器以及Java程式可以訪問這些指令碼的相關API,即相關類庫。我使用的是一個叫做LuaJava的開源專案,可以在: http://download.csdn.net/detail/jwcjlu/9748334 找到LuaJava的類庫等
下載下來解壓後包括兩個檔案(我下載的是1.1版本的): luajava-1.1.jar 檔案和 luajava-1.1.dll動態連線庫檔案
其中把luajava-1.1.jar加入你的專案的ClassPath中,以便程式可以使用它提供的API
把luajava-1.1.dll加入到你的系統安裝盤的System32檔案中如下圖
這樣環境就準備好了
然後開啟eclipse
新建一個lua工程並新建一個LuaJavaTest的java類
LuaJavaTest.java的內容如下
package com.lua;
import org.keplerproject.luajava.LuaException;
import org.keplerproject.luajava.LuaObject;
import org.keplerproject.luajava.LuaState;
import org.keplerproject.luajava.LuaStateFactory;
public class LuaJavaTest {
static String maxAverage="function maxAverage(...) "
+"agr={...} "
+"max=0 "
+"sum=0 "
+"for k,v in ipairs(agr) do "
+"print(k,v) "
+"sum=sum+v "
+"if v> max then "
+"max=v "
+"end "
+"end "
+"return max,sum/#agr "
+"end; ";
public static void main(String[] args) throws LuaException {
LuaState L = LuaStateFactory.newLuaState();
L.openLibs();
System.out.println("這裡是Java程式呼叫Lua指令碼");
// 載入指令碼
L.LdoString(maxAverage);//獲取Lua全域性函式,java_lua_f
LuaObject func = L.getLuaObject("maxAverage");
//因為LuaObject類映射了Lua語言中所有型別,即LuaObject也是Lua函式
//通過java中呼叫LuaObject.call()函式,可以使用lua函式。
//該函式可以傳遞多個引數 或者返回多個引數
Object[] teste = func.call(new Object[] { 2,4,98,12,34,56},2);
System.out.println(teste[0]);
System.out.println(teste[1]);
System.out.println("這裡是Java程式呼叫Lua指令碼end");
}
}
執行一下程式如下
這裡是Java程式呼叫Lua指令碼
98.0
34.333333333333336
這裡是Java程式呼叫Lua指令碼end
1 2
2 4
3 98
4 12
5 34
6 56