更多BeanShell内容请点击此处

BeanShell 最强大的功能之一就是具有编写 Java 接口脚本的能力。这个功能允许你编写脚本用作事件处理、监听以及其他 Java API 的组件。它也可以从你的应用中更简单得调用脚本化的组件,因为它们可以被看作任何其他 Java 对象。

获得脚本的组件来实现一个 Java 接口的一种方法是使用标准的 Java 匿名内部类构建脚本的对象实现的接口类型的语法。
示例代码

  1. buttonHandler = new ActionListener() { 
  2.   actionPerformed( event ) { 
  3.     print(event); 
  4.   } 
  5. }; 
  6. button = new JButton(); 
  7. button.addActionListener( buttonHandler ); 
  8. frame(button); 

运行效果



点击“My Button”后,显示如下。


在上面的例子中我们创建了一个对象,实现了“ActionListener”接口并赋予一个名叫“buttonHandler”的变量。“buttonHandler”对象包含脚本方法“actionPerformed()”,它将被调用来处理该接口上的方法调用。

请 注意在示例中我们使用 JButton 自己的方法“addActionListener()”将它和已经脚本化的 ActionListener 进行了注册。当然 Jbutton 是 Java 编写的标准 Swing 组件。不知当它调用“buttonHandler”的 actionPerformed() 方法时竟然这会导致 BeanShell 解释器运行一个脚本来评估结果。

在上面的例子上再多总结 一下——脚本接口是通过查找脚本方法来实现接口方法的方式来工作的。一个 Java 方法调用一个脚本来实现一个接口导致 BeanShell 通过匹配签名(名称和变量类型)来寻找一个对应的脚本方法。BeanShell 然后调用方法,传递参数以及传递任何返回值。当 BeanShell 作为其他的代码运行在同一个 Java 虚拟机上,你可以自由地传递“存活着的” Java 对象作为参数和返回值,在你的脚本中动态地同他们进行运作;是无缝集成的。