欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

lua獲取代碼到j(luò)ava lua調(diào)用jar包

請教如何用.lua調(diào)用.java包內(nèi)的方法和變量

1.lua加入到環(huán)境變量中。即cmd可以識別lua命令

創(chuàng)新互聯(lián)是專業(yè)的燈塔網(wǎng)站建設(shè)公司,燈塔接單;提供成都網(wǎng)站制作、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行燈塔網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

(右鍵計算機(jī)-》高級系統(tǒng)設(shè)置 在高級面板 -》環(huán)境變量 在系統(tǒng)變量或者用戶變量中找到path(沒有就新建path) path 中加入lua的路徑即可,如:D:\Developments\Lua\5.1(原來有path時,在原來的path值后加分號,再加路徑,如:原來的值;D:\Developments\Lua\5.1))

2.寫一個lua的腳本,放在任意路徑下。比如在桌面下有文件 hello.lua文件內(nèi)容為

print('Hello World!')

3進(jìn)入cmd(win+R 輸入cmd回車) 切到桌面

cd C:\Documents\Desktop\

運(yùn)行腳本即可:lua hello.lua

輸出結(jié)果為:Hello World!

lua如何調(diào)用java程序

Lua是一個實用的腳本語言,相對于Python來說,比較小巧,但它功能并不遜色,特別是在游戲開發(fā)中非常實用(WoW采用的就是Lua作為腳本的)。Lua在C\C++的實現(xiàn)我就不多說了,網(wǎng)上隨便一搜,到處都是這方面的介紹,我想說的是如何在Java下使用Lua以提高編程效率、增強(qiáng)你的程序可擴(kuò)展性。

首先,要在Java上使用Lua腳本,必須有關(guān)于Lua腳本解釋器以及Java程序可以訪問這些腳本的相關(guān)API,即相關(guān)類庫。我使用的是一個叫做LuaJava的開源項目,可以在: 找到LuaJava的類庫以及源代碼,使用文檔資等

下載下來解壓后包括兩個文件(我下載的是1.1版本的): luajava-1.1.jar 文件和 luajava-1.1.dll動態(tài)連接庫文件

luajava-1.1.jar就容易了,就是將其加入你的項目的ClassPath中,以便程序可以使用它提供的API

luaJava-1.1.dll就麻煩了,你必須將其加入你的Windows安裝目錄下,比如你用的是XP,安裝在C盤,那就直接將其加入C:\WINDOWS目錄下即可,當(dāng)然你也可以將其加入你的JDK下的jre下

好了,現(xiàn)在你的項目就可以使用Lua腳本來實現(xiàn)動態(tài)擴(kuò)展功能了!不過不要急,你還得有工具來寫Lua腳本吧?不可能用記事本來寫吧???????

你可以使用UltraEdit,但你用UE打開lua文件后,會發(fā)現(xiàn)和記事本差不多,并沒有高亮(可能新版本的支持Lua腳本了),如果你的UE不支持,那么先去UltraEdit的官網(wǎng)下載支持Lua的Wordfiles文件(),是個文本文件(lua.txt)。打開UltraEdit安裝目錄下的wordfile.txt,把lua.txt文件中的內(nèi)容拷貝粘貼到wordfile.txt的末尾,存盤,OK,于是UltraEdit語法高亮項多出Lua一項,可以選擇使用了。其他語言的語法高亮支持與此類似。

但你如果是Java開發(fā)者,應(yīng)該都用過Eclipse吧?可否在Eclipse下直接就寫Lua腳本呢?答案是可以的!

這當(dāng)然是Eclipse的強(qiáng)大的插件管理功能啦,你可以去下載luaeclipse插件來使你的Eclipse擁有編寫Lua腳本的能力(既可以高亮顯示你的腳本,是不是很爽呢),你可以在這里下載:

下載后安裝后,你的Eclipse就可以建立和編寫Lua腳本了,注意設(shè)置一下首選項中關(guān)于LUA的屬性(Eclipse安裝插件就不用我說了吧????)

好了,現(xiàn)在一切都準(zhǔn)備好了,讓我們來一個HelloWorld吧!

首先在Eclipse先建立一個TestLua項目,然后編寫如下程序:

import org.keplerproject.luajava.*;

public class Hello

{

public static void main(String[] args)

{

LuaState L = LuaStateFactory.newLuaState();

L.openLibs();

System.out.println("這里是Java程序調(diào)用Lua腳本");

// 加載腳本hello.lua,并執(zhí)行

L.LdoFile("res/hello.lua");

}

}

好了,程序?qū)懲炅耍?dāng)然是保存為Hello.java咯,注意,這是Java代碼!這是Java代碼調(diào)用了一個叫hello.lua的腳本,下邊是這個腳本文件的內(nèi)容(你可以直接把他們復(fù)制到你的hello.lua文件中):

================================================================

--基本方法

print("您現(xiàn)在使用的是LUA腳本語言")

print("讓我們一起來感受它的奇妙吧!\n")

--特點1,賦值

a={1,2}

b=a

print(a==b, a~=b) --輸出 true, false

a={1,2}

b={1,2}

print(a==b, a~=b) --輸出 false, true

--特點2,交換

a,b=1,2

a,b=b,a

print(a)

print(b)

print("連接".."字符串"..2^3)

print(type(2))

--while循環(huán)

i=0

print("while循環(huán)例子")

while i5

do

print(i);

i=i+1

end

--repeat循環(huán)

i=0

print("repeat循環(huán)例子")

repeat

print(i)

i=i+1

until i=5

--for循環(huán)

print("for循環(huán)例子")

for i=0,5,1

do

print(i)

end

T1={}

T1[1] = 10

print(T1[1])

function fun(a,b,...)

print(a)

print(b)

print(arg[1])

print(arg[2])

print(arg[3])

return

end

a,b=2,3

fun(a,b,200,400,500)

========================================================

好了,上邊的腳本如果你不懂什么意思也沒關(guān)系,直接運(yùn)行一下吧

你可以執(zhí)行編譯執(zhí)行那個Hello.java程序就可以了,就會看到如下的輸出結(jié)果:

========================================================

這里是Java程序調(diào)用Lua腳本

您現(xiàn)在使用的是LUA腳本語言

讓我們一起來感受它的奇妙吧!

true false

false true

2

1

連接字符串8

number

while循環(huán)例子

1

2

3

4

repeat循環(huán)例子

1

2

3

4

for循環(huán)例子

1

2

3

4

5

10

2

3

200

400

500

==========================================================

怎樣,是不是很爽呢?覺得沒意思?好,在來一段腳本吧:

frame = luajava.newInstance("java.awt.Frame", "Lua Java Console")

console = luajava.newInstance("java.awt.TextArea")

buttons_pn = luajava.newInstance("java.awt.Panel")

execute_bt = luajava.newInstance("java.awt.Button", "Execute")

clear_bt = luajava.newInstance("java.awt.Button", "Clear")

exit_bt = luajava.newInstance("java.awt.Button", "Exit")

frame:setSize(600,300)

buttons_pn:add(execute_bt)

buttons_pn:add(clear_bt)

buttons_pn:add(exit_bt)

BorderLayout = luajava.bindClass("java.awt.BorderLayout")

frame:add(BorderLayout.NORTH, console)

frame:add(BorderLayout.SOUTH, buttons_pn)

frame:pack()

frame:show()

--

-- Listeners

--

execute_cb = {

actionPerformed = function(ev)

print("execute")

pcall(loadstring(console:getText()))

end

}

jproxy = luajava.createProxy("java.awt.event.ActionListener",execute_cb)

execute_bt:addActionListener(jproxy)

clear_cb = {actionPerformed= function (ev)

print("clear");

console:setText("");

end

}

jproxy = luajava.createProxy("java.awt.event.ActionListener" ,clear_cb)

clear_bt:addActionListener(jproxy)

exit_cb = { actionPerformed=function (ev)

print("exit")

frame:setVisible(false)

frame:dispose()

end

}

jproxyb = luajava.createProxy("java.awt.event.ActionListener" ,exit_cb)

exit_bt:addActionListener(jproxyb)

close_cb = { }

function close_cb.windowClosing(ev)

print("close")

frame:setVisible(false)

frame:dispose()

end

function close_cb.windowActivated(ev)

print("act")

end

jproxy = luajava.createProxy("java.awt.event.WindowListener", close_cb)

frame:addWindowListener(jproxy)

這段腳本運(yùn)行后你將會非常想進(jìn)一步了解LUA的奧妙,至于什么我就不說了,你們自己運(yùn)行看看吧。。。哈哈,就寫到這里了,我去上下WC。。。。

java代碼,執(zhí)行l(wèi)ua腳本!

要在Java上使用Lua腳本,必須有關(guān)于Lua腳本解釋器以及Java程序可以訪問這些腳本的相關(guān)API,即相關(guān)類庫??梢允褂靡粋€叫做LuaJava的開源項目,可以在 找到LuaJava的類庫以及源代碼,使用文檔資等

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

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

但是, 測試的時候, 很快發(fā)現(xiàn)了第一個問題: 在調(diào)用LuaJava中提供的LuaState.pushInteger?方法的時候, 出現(xiàn)了錯誤 :?Unsatisfied Link Error?. 其他的LuaState.pushNumber?方法倒是沒有問題. 用Depends工具看了下, 這個.dll居然沒有導(dǎo)出pushInteger?這個函數(shù)。

(1).下載LuaJava的源代碼, 查看了下Luajava.c 和 Luajava.h, 發(fā)現(xiàn)果然里面有點問題, 在.h里面定義了JNI中對應(yīng)Java函數(shù)的C函數(shù)

JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger?

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

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

這時再在Java中調(diào)用pushInteger方法就沒有問題了.

在測試中, 發(fā)現(xiàn)Luajava提供的文檔中, 對于Lua腳本怎么調(diào)用Java對象/方法很詳細(xì), 但是在Java中怎么調(diào)用Lua函數(shù)/取得返回值 就沒有. 參考了?的Lua C文檔, 實現(xiàn)了傳遞對象到Lua中并取得返回值的代碼:

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

Lua 腳本(test.lua):

function test(a,b)

return a+b

end?

Java代碼:

static {

//加載Lua5.1.dll, 因為LuaJava最后還是要調(diào)用Lua的東西

System.loadLibrary("lua5.1");

}

public static void main(String[] argu) throws LuaException {

LuaState L = LuaStateFactory.newLuaState();

L.openLibs();

//讀入Lua腳本

int error = L.LdoFile("test.lua");

if (error != 0) {

System.out.println("Read/Parse lua file error. Exit.");

return;

}

//找到函數(shù)test

L.getField(LuaState.LUA_GLOBALSINDEX, "test");

//參數(shù)1壓棧

L.pushInteger(1);

//參數(shù)2壓棧

L.pushInteger(2);

//調(diào)用!! 一共兩個參數(shù), 1個返回值

L.call(2, 1);

//保存返回值, 到a中

L.setField(LuaState.LUA_GLOBALSINDEX, "a");

//讀入a

LuaObject l = L.getLuaObject("a");

//打印結(jié)果.

System.out.println("Result is " + l.getString());

L.close();

}

測試2: 傳遞Java對象

class Value {

public int i;

public void inc() {

i++;

}

public int get() {

return i;

}

public String toString() {

return "Value is " + i;

}

}

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

function test1(v)

v:inc();

v:inc();

print("In lua: " .. v:get());

return v

end?

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

//找到函數(shù)est1

L.getField(LuaState.LUA_GLOBALSINDEX, "test1");

//生成新的對象供測試

Value v = new Value();

//對象壓棧

L.pushObjectValue(v);

//調(diào)用函數(shù)test1, 此時1個參數(shù), 1個返回值

L.call(1, 1);

//結(jié)果放在b中.

L.setField(LuaState.LUA_GLOBALSINDEX, "b");

LuaObject l = L.getLuaObject("b");

System.out.println("Result is " + l.getObject());

總結(jié):運(yùn)行結(jié)果:

Result is Value is 2

In lua: 2?

和預(yù)期的一致.

本文標(biāo)題:lua獲取代碼到j(luò)ava lua調(diào)用jar包
文章來源:http://chinadenli.net/article30/dogsgpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)ChatGPT、營銷型網(wǎng)站建設(shè)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)