b;
}
result = multiply(12,14);
print(result);//打印出168
为Java应用程序加入脚本引擎(2)
时间:2011-06-19 IBM 陈先波
在BeanShell中也可以写对象。它与JavaScript很相似,它用一个方法,再内 嵌一些内部方法,并且在未尾返回一个this来实现对象的编程:
Employee()
{
age = 26;
sex = "M";
name = "Turbo";
int getAge()
{
return age;
}
String getSex()
{
return sex;
}
String getName()
{
return name;
}
return this;
}
turbo = Employee(); // 构造一个Employee对象。
print("Name:"+turbo.getName); //打印出employee的名字。
上面的程序片断,相信大家已经对BeanShell的语法有了一个印象,你可以通 过参考资料中的链接,找到更详细的BeanShell的脚本语法教程。
在应用程序中嵌入脚本引擎
其实在Java中调用bsh的脚本非常简单,你需要先创建一个Interpreter类的 实例.然后就可以用它运行你的脚本代码或者脚本文件。请看下面的一个例子, 这个例子来自于BeanShell的文档:
Import bsh.*;
//创建一个bsh解释器实例
Interpeter bsh = new Interpreter();
// 表达式求值
bsh.eval("foo=Math.sin(0.5)");
bsh.eval("bar=foo*5; bar=Math.cos(bar);");
bsh.eval("for(i=0; i<10; i) { print(\"hello\"); }");
// 运行语句。
bsh.eval("for(int i=0; i<10; i) { System.out.println (\"hello\"); }");
// 载入脚本文件
bsh.source("myscript.bsh"); // or bsh.eval("source (\"myscript.bsh\")");
// 使用set()和get()方法存取变量值。
bsh.set( "date", new Date() );
Date date = (Date)bsh.get( "date" );
// This would also work:
Date date = (Date)bsh.eval( "date" );
bsh.eval("year = date.getYear()");
Integer year = (Integer)bsh.get("year"); // primitives use wrappers
// 也可以实现任意的Java Interface..
// 或处理AWT事件。
bsh.eval( "actionPerformed( e ) { print( e ); }");
ActionListener scriptedHandler =
(ActionListener)bsh.eval("return (ActionListener) this");
Use the scripted event handler normally...
new JButton.addActionListener( script );
为Java应用程序加入脚本引擎(3)
时间:2011-06-19 IBM 陈先波
示例程序
为了让读者更好的理解,我们在这里以jdk1.4中的一个演示程序,Notepad程 序作为基础,向读者讲解BeanShell是如何嵌入到Notepad程序中的。如果你安装 了JDK1.4的话,Notepad源程序可以在<JAVA_HOME>\demo\jfc\Notepad目 录中找到.
笔者写的一个BeanShell类,用来运行用户的脚本,下面的该程序的完整清单 :
import javax.swing.text.*;
import javax.swing.*;
import java.io.*;
import bsh.*;
public class BeanShell
{
private static NameSpace namespace;
private static boolean running;
private static Notepad notepad;
//初始化引擎
public static void initBeanShell(Notepad pad)
{
notepad = pad;
namespace = new NameSpace("Notepad embedded scripting engine.");
}
//运行一段脚本代码
public static void
|