javascript脚本化java

JavaScript解释器包含一种功能,允许JavaScript代码来查询和设置java对象中字段值以及调用java对象中的方法。另外,JavaScript公平可以自己创建一个java对象。来看一段代码:

//创建java对象
var frame = new Packages.javax.swing.JFrame("Hello World");
var button = new Packages.javax.swing.JButton("Hello World");
var font = new Packages.java.awt.Font("SansSerif",Packages.java.awt.Font.BOLD,24);
//调用java对象中的方法 和java中一样吧? :D
frame.add(button);
button.setFont(font);
frame.setSize(200,200);
frame.setVisible(true);

JavaScript解释器通过Packages全局变量来访问所有的java包。例如:
[color=blue][b]Packages.javax.awt[/b][/color]是访问[color=blue][b]javax.awt[/b][/color]包,而[color=blue][b]Packages.java.lang.System[/b][/color]是访问[color=blue][b]java.lang.System[/b][/color]类。
另外,如果是java包,JavaScript解释器有一个专门访问java包的全局标记,可以不用[color=blue]Packages[/color]了,这个全局标记就是[color=indigo]java[/color],因此,上面的[color=blue][b]Packages.java.lang.System[/b][/color]可以直接写成[color=blue][b]java.lang.System[/b][/color]。除了java包,其它的包都要通过Packages全局标记来访问。
JavaScript之所以如此方便的使用java对象,是因为JavaScript解释器采用了一种LivaConnect技术。要理解[b]LiveConnect[/b]所使用的JavaScript数据类型。
一、[b][color=red]JavaPackage[/color][/b]类:
JavaPackage是JavaScript的一种数据类型。java中的一个包存放着一组相关的java类,而一个JavaPackage类就表示了一个java包。JavaPackage的属性就是java包中所有的类,以及这个包中的所有子包。像java、javax包都是JavaPackage对象。[b]注[/b]:JavaPackage中的属性(即:类)是不可枚举的,所以无法用for/in循环查看包中的内容。
所有的JavaPackage对象都包含在一个父JavaPackage中。例:
[color=blue][b]Packages.java[/b][/color]是一个[b]JavaPackage[/b],它包含了[color=blue][b]Packages.java.awt[/b][/color]这个[b]JavaPackage[/b].而[color=blue][b]Packages.java.awt[/b][/color]又包含了一个[color=blue][b]Packages.java.awt.Button[/b][/color],这个是个具体类了,那它就不是一个[b]JavaPackage[/b]了,而是[b][color=indigo]JavaClass[/color][/b].(JavaClass是包中的类)。另外,[color=blue][b]Packages.java.awt[/b][/color]下还有个包[color=blue][b]Packages.java.awt.image[/b][/color]包。
从而看出,某个JavaPackage通常存在这种情况:
[img]http://han2000lei.iteye.com/upload/picture/pic/33845/52fe95ce-d1cf-32e6-90e9-d5fe118a3a0b.jpg[/img]
JavaPackage有两个缺点:
1、对于LiveConnect来说,没有办法提前分辨属性是类还是包,所以JavaScript先把属性当类来处理,如果找不到类,才按包来独步一时。这样导致了第二个缺点
2、如果写错了类名,JavaScript会把它当作一个包,而不是通知程序员类名不存在。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值