2010-04-25 80 views
4

A码是值得1000个字解释它:-)的Java脚本引擎导入我的课不工作

package jasim; 

import javax.script.ScriptEngine; 
import javax.script.ScriptEngineManager; 
import javax.script.ScriptException; 

public class JSTest { 

    public static void main(String[] args) throws ScriptException { 
     ScriptEngine jse = new ScriptEngineManager().getEngineByExtension("js"); 

     jse.eval("println(new jasim.JSTest().toString)"); 

    } 

    @Override 
    public String toString() { 
     return "JSTest Object"; 
    } 
} 

该代码将失败,以下异常:

Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "jasim" is not defined. (<Unknown source>#1) in <Unknown source> at line number 1 

我如何将我自己的类导入到ScriptEngine中?

+0

一个代码值1000个字来解释它。将它们放在类路径中的 – 2013-01-11 10:18:16

回答

7

Mozilla Rhino docs后,解决方法是,使用方法:

importPackage(Packages.jasim)内脚本或使用new Packages.jasim.JSTest()

这在Sun文档中对于ScriptingEngine文档中的importPackage不太清楚。

+1

该文档注意到_“该类为脚本提供了额外的'importPackage()'和'importClass()'全局函数,但它们的广泛用法倾向于用Java类的名称污染全局名称空间并防止从垃圾收集中加载的类。“_你最好使用'JavaImporter'。 – McDowell 2010-04-25 14:43:42

-4

导入javax.script.ScriptEngine;以同样的方式...

只要确保你的类都在CLASSPATH

+1

,但在JavaScript运行时中不可见。 – Ayman 2010-04-25 09:38:46