2010-04-25 43 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