2010-04-25 3 views
4

Un code vaut 1000 mots de l'expliquer :-)Java Script Engine importer mes cours ne fonctionne pas

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"; 
    } 
} 

Ce code échouera à l'exception ci-dessous:

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 

Comment puis-je importer mes propres classes dans le ScriptEngine?

+0

Un code vaut 1000 mots pour l'expliquer. Réduire –

Répondre

7

Après avoir regardé la Mozilla Rhino docs, la solution est d'utiliser soit:

importPackage(Packages.jasim) dans le script, ou pour utiliser new Packages.jasim.JSTest()

Ceci n'est pas si clair dans les documents Sun concernant le importPackage dans les documents ScriptingEngine.

+1

La documentation note que _ "La classe fournit des fonctions globales supplémentaires' importPackage() 'et importClass()' pour les scripts, mais leur utilisation intensive a tendance à polluer l'espace de nom global avec des noms de classes Java et empêche les classes chargées de garbage collection "_ Vous feriez mieux d'utiliser' JavaImporter'. – McDowell

-4

De la même façon l'importation javax.script.ScriptEngine; ...

Assurez-vous que vos classes sont dans le CLASSPATH

+1

ils sont dans le classpath, mais pas visible dans le runtime JavaScript. – Ayman

Questions connexes