
正文
看java脚本语言代码 java脚本怎么运行
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何在Java中使用Lua脚本语言
LuaJava实际上就是按照Lua官方文档, 把Lua看java脚本语言代码的C接口通过JNI包装成Java的库. 下载, 里面是一个.dll, 一个.jar. 把.dll放到java.library.path 下, 再把.lib放到classpath 中, helloworld运行OK.
但是, 测试的时候, 很快发现了第一个问题: 在调用LuaJava中提供的LuaState.pushInteger 方法的时候, 出现了错误 : Unsatisfied Link Error . 其看java脚本语言代码他的LuaState.pushNumber 方法倒是没有问题. 用Depends工具看了下, 这个.dll居然没有导出pushInteger 这个函数。
(1).下载LuaJava的源代码, 查看了下Luajava.c 和 Luajava.h, 发现果然里面有点问题, 在.h里面定义了JNI中对应Java函数的C函数
JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger
但是.c中没有实现这个函数. 无语, 看来大马虎哪都有啊. 幸亏有源代码, 照猫画虎在Luajava.c中加上这个函数的实现,
(2).然后编译. 编译也出现了问题了, 官方文档中说可以用VC++来Build, 但是没有说官方用的是什么版本. 看java脚本语言代码我用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函数/取得返回值 就没有. 参考了 的Lua C文档, 实现了传递对象到Lua中并取得返回值的代码:
Test1: 测试传递简单类型, 并取得返回值:
Lua 脚本(test.lua):
function test(a,b)
return a+b
end
Java代码:
static {
//加载Lua5.1.dll, 因为LuaJava最后还是要调用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;
}
//找到函数test
L.getField(LuaState.LUA_GLOBALSINDEX, "test");
//参数1压栈
L.pushInteger(1);
//参数2压栈
L.pushInteger(2);
//调用!! 一共两个参数, 1个返回值
L.call(2, 1);
//保存返回值, 到a中
L.setField(LuaState.LUA_GLOBALSINDEX, "a");
//读入a
LuaObject l = L.getLuaObject("a");
//打印结果.
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脚本: (该脚本中调用两次对象的inc方法, 并调用get方法输出结果)
function test1(v)
v:inc();
v:inc();
print("In lua: " .. v:get());
return v
end
Java 代码: (前面都一样, 略)
//找到函数est1
L.getField(LuaState.LUA_GLOBALSINDEX, "test1");
//生成新的对象供测试
Value v = new Value();
//对象压栈
L.pushObjectValue(v);
//调用函数test1, 此时1个参数, 1个返回值
L.call(1, 1);
//结果放在b中.
L.setField(LuaState.LUA_GLOBALSINDEX, "b");
LuaObject l = L.getLuaObject("b");
System.out.println("Result is " + l.getObject());
总结:运行结果:
Result is Value is 2
In lua: 2
和预期的一致.
相关问答
Q1: 什么是JAVA脚本?
Java脚本语言就是JavaScript
JavaScript,是一种基于对象的脚本语言。网景通讯公司最初在它的Navigator 2.0产品上设计并实现的,原名LiveScript。目前已经在WWW上广泛用于动态Web页面的编程语言。
Java脚本语言的目的是增加HTML的互动性
Java脚本语言是一种轻量级的编程语言,
Java脚本语言通常直接嵌入HTML页
Java脚本语言是一种解释性语言(脚本的执行无需翻译)
Q2: java的脚本语言是指什么?
java的脚本语言就是jsp(Java Server Page)服务器动态页面语言
jsp语言是嵌入在Html文档中的java代码
jsp语言语法格式如下:
% Java代码 %
%
//1 定义变量 2 编写语句
%
%!
//2 定义全局变量 2 方法 3 类
%
% =输出变量或字符串常量 %
你明白看java脚本语言代码了吗看java脚本语言代码?
Q3: 帮我看一下,我的java代码。为什么运行结果不对!如图:请详解,为什么其他组件没有显示?
看注释:
import java.awt.GridLayout;
import javax.swing.*;
public class LoadForm extends JFrame{
private JPanel jpanel1;
private JTextField jtext1;
private JPasswordField password;
private JLabel jlable1;
private JLabel jlable2;
private JButton button1;
private JButton button2;
public LoadForm()
{
super("商品管理系统");
this.setLayout(null);
GridLayout layout=new GridLayout(3,3,10,10);//这句保留
jpanel1=new JPanel();
//jpanel1.setLayout(null);//jpanel1的布局不能为空
jlable1=new JLabel("用户名");
jlable2=new JLabel("密 码");
jtext1=new JTextField();
password=new JPasswordField();
button1=new JButton("确定");
button2=new JButton("取消");
jpanel1.add(jlable1);
jpanel1.add(jtext1);
jpanel1.add(jlable2);
jpanel1.add(password);
jpanel1.add(button1);
jpanel1.add(button2);
//this.add(jpanel1);//写法错误
this.setContentPane(jpanel1);//设置jpanel1为Frame的内容面版
this.setBounds(200,200,100,100);
//this.setSize(200,200);
this.setVisible(true);
}
//main方法测试
public static void main(String args[]){
new LoadForm();
}
}
Q4: 懂JAVA脚本语言的进
让网页上的图片作某种曲线运动
打开一个包含图片的网页
删除地址栏中的地址
把这段代码复制到地址栏后按回车键试试!
javascript:
R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200;
DI=document.images; //取得网页上的图片数组的引用
DIL=DI.length; //取得图片数组的长度
function A()
{
for(i=0; iDIL; i++) //通过循环操作每一张图片
{
DIS=DI[i].style; //取得图片样式的引用
DIS.position='absolute'; //图片的left和top用绝对坐标
DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; //计算图片的left
DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5; //计算图片的top
}
R++;
}
setInterval('A()',5); //每5ms调用A()一次
void(0); //让当前代码保留窗口显示的内容
关于看java脚本语言代码和java脚本怎么运行的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







