为Java应用程序加入脚本引擎2011-06-19 IBM 陈先波前言现代许多流行的应用程序,越来越多的使用了脚本引擎,最典型的有 Microsoft Office中的VBA等。脚本引擎能提供应用程序极大的可扩展性,也是 被许多热忠于二次开发的使用者所乐意看到的。本文主要讲解 BeanShell----这 样一个Java应用程序脚本引擎,你会了解它的基本特性,及如何将它嵌入到你的 应用程序中。你将看到,为自己的应用程序加上脚本引擎是多么容易的一件事情 。常见的脚本引擎现在网络上流行着许多种脚本语言,如TCL,Perl, JavaScript,Python等, 并且有许多脚本语言都有基于Java的解释器,就笔者所知道的有如下几种:
| Language | Java Implementation |
| JavaScript | Rhino |
| Python | Jython (formerly JPython) |
| Tcl/Tk | Jacl |
| Perl | None |
| Java itself | BeanShell |
以上几种脚本都有各自的语法,而其中JavaScript和BeanShell的语法,对于 使用者来说更具有亲切感。本文主要讲解BeanShell的的特性及其如何集成到 Java应用程序中。什么是BeanShell?BeanShell是一个小型的,免费的,可嵌入式的,具有面向对象脚本语言特性 的Java代码解释器。它是用Java语言写的。它能执行标准的Java语句和表达式, 还自带简单的脚本命令和语法。它把编程对象当成一个简单的方法,这很像Perl 和JavaScript.你可以在写Java测试或调试时使用BeanShell,也可以用它作为你的应用程序 的脚本引挚。简而言之,BeanShell可以动态的解释JAVA语言。也就是说 BeanShell在许多方面对于Java的用处就像Tcl/Tk对于C的用处一样:BeanShell 是可嵌入式的---你可以在运行时从你的应用程序调用BeanShell去动态的执行 Java代码或是为你的应用程序提供脚本扩展。相反,你也可以从BeanShell调用 你的应用程序及其对象,它可以让JAVA对象和API动态运行。正因为BeanShell是 用JAVA写的,所以它可以和你的应用程序运行在同一个JVM空间内,你也可以自 由的传递实时对象的引用(References)到脚本代码中并且作为结果返回。BeanShell脚本语言简介BeanShell能理解标准的JAVA语句,表达式,和方法宣告。语句和表达式的内 容可以是:变量,宣告,赋值,方法调用,循环,条件等。在 Java程序中你必须严格的使用它们,但在BeanShell中,你可以用"宽松类 型"(loosely typed)的方式来使用它们。也就是说,你可以在写脚本时偷懒,不 进行变量类型的宣告(在原始数据类型和对象都可以)。如果你试着用错变量类型 ,BeanShell将会给出一个错误。总之BeanShell的脚本是很容易上手的。这里有一个简单的例子:
foo = "Foo";
four = (2 + 2)*2/2;
print( foo + " = " + four ); // print() 是BeanShell的一个 脚本命令。
// 循环
for (i=0; i<5; i++)
print(i);
//显示一个有包含一个按钮的窗口
button = new JButton( "My Button" );
frame = new JFrame( "My Frame" );
frame.getContentPane().add( button, "Center" );
frame.pack();
frame.setVisible(true);你也可以在Beanshell脚本中宣告和定义自己的方法:
int multiply(int a, int b)
{
return a*b;
}
print(multiply(12,14));//打印出168BeanShell的变量或参数的类型可以不用显示的指定,如下:
int multiply(a, b)
{
return a*b;
}
result = multiply(12,14);
print(result);//打印出168