xjl:Rhino的两个问题

Rhino 中使用 Java 对象

与网页中所使用的 JavaScript 不同的是, Rhino 中的脚本可以使用 Java 中的对象。要在脚本中使用 Java 类必须将 Java 类引入脚本。

使用 cx.initStandardObjects 创建出来的 Scriptable 类型实例,不支持在脚本中使用 import 语句,此时需要使用如下的代码来创建一个 ImporterTopLevel 类的实例,它是 Scriptable 一个实现,这样就支持在脚本中使用 importPackage 语句: <o:p></o:p>

Context cx = Context.enter();

Scriptable iptScope = new ImporterTopLevel(cx);

在脚本中如下引入包名: <o:p></o:p>

importPackage(Packages.javax.swing);<o:p></o:p>

如果不使用 importPackage 语句,也可以采用直接包名来使用类: <o:p></o:p>

Packages.javax.swing.JFrame frame = new JFrame(“myWindow”);<o:p></o:p>

<o:p> </o:p>

下面的代码演示在脚本中创建一个窗口,并在窗口上显示一个按钮。 <o:p></o:p>

import org.mozilla.javascript.Context;

import org.mozilla.javascript.ImporterTopLevel;

import org.mozilla.javascript.Scriptable;

<o:p>  </o:p>

public class JSTest3

{

     public static void main(String[] args)

     {

         StringBuffer script = new StringBuffer();

         script.append("importPackage(java.awt);\n");

         script.append("frame = new Frame(\"JavaScript\");\n");

         script.append("frame.show();\n");

         script.append("frame.setSize(new Dimension(200,100));\n");

         script.append("button = new Button(\" 按钮 \");\n");

         script.append("frame.add(button);\n");

         script.append("frame.show();\n");

<o:p>  </o:p>

         Context ctx = Context.enter();

         Scriptable scope = new ImporterTopLevel(ctx);

         try

         {

              ctx.evaluateString(scope, script.toString(), null, 1, null);

         } finally

         {

              Context.exit();

         }

     }

}

运行以后就会显示下面的窗口: <o:p></o:p>

<v:shapetype o:spt="75" coordsize="21600,21600" stroked="f" id="_x0000_t75" filled="f" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path gradientshapeok="t" o:extrusionok="f" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype>

ri1.JPG

 

你可能感兴趣的:(JavaScript,swing,脚本,ext,F#)