Problème de ScriptEngine en Java
Bonjour à tous,
J'ai déjà réalisé quelques programmes Java notamment avec Netbeans dont je suis content.
Mais là, mon problème est vraiment un soucis de débutant en Java.
Je galère depuis plusieurs jours avec un assez gros programme alors je suis revenu au petit programme de test qui met en évidence les mêmes soucis.
Mon problème est l'appel d'une fonction Java depuis le javascript (dans l'autre sens pas de soucis).
Je me suis basé sur cet exemple trouvé sur le web qui déclenche les mêmes erreurs.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import java.io.FileReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Exemple3 {
private static class Afficheur {
public void affiche() {
System.out.println("J'affiche !");
}
}
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval(new FileReader("afficheur.js"));
Afficheur aff = new Afficheur();
engine.put("monAfficheur", aff);
Invocable inv = (Invocable) engine;
inv.invokeFunction("affiche");
}
} |
le fichier javascript est le suivant :
Code:
1 2 3
| function affiche() {
monAfficheur.affiche();
} |
ça se compile, mais à l'exécutions j'obtiens :
Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.EcmaError: TypeError: Impossible de trouver la fonction affiche dans lobjet {1}. (<Unknown source>#2) in <Unknown source> at line number 2
at com.sun.script.javascript.RhinoScriptEngine.invoke(RhinoScriptEngine.java:300)
at com.sun.script.javascript.RhinoScriptEngine.invokeFunction(RhinoScriptEngine.java:258)
at Example3.main(Example3.java:23)
Caused by: sun.org.mozilla.javascript.EcmaError: TypeError: Impossible de trouver la fonction affiche dans lobjet {1}. (<Unknown source>#2)
at sun.org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687)
at sun.org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665)
at sun.org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3693)
at sun.org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3712)
at sun.org.mozilla.javascript.ScriptRuntime.notFunctionError(ScriptRuntime.java:3783)
at sun.org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2269)
at sun.org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2251)
at sun.org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1317)
at sun.org.mozilla.javascript.Interpreter.interpret(Interpreter.java:815)
at sun.org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:109)
at sun.org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)
at com.sun.script.javascript.RhinoScriptEngine$1.superDoTopCall(RhinoScriptEngine.java:116)
at com.sun.script.javascript.RhinoScriptEngine$1.doTopCall(RhinoScriptEngine.java:109)
at sun.org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091)
at sun.org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:107)
at com.sun.script.javascript.RhinoScriptEngine.invoke(RhinoScriptEngine.java:294)
... 2 more
Il semble que j'aie un problème de visibilité, et là, j'avoue ne pas encore avoir tout compris à la visibilité en Java.
Je serais profondément reconnaissant envers ceux qui pourraient m'aider à trouver la voie...
Cordialement.
Danilo