1. 程式人生 > >windows7環境中java呼叫lua指令碼函式

windows7環境中java呼叫lua指令碼函式

       最近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