IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Problème de ScriptEngine en Java


Sujet :

avec Java

  1. #1
    Membre confirmé Avatar de danucc
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 70
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    Ta classe "Afficheur" est déclarée en private : elle n'est donc visible qu'à l'intérieur de ta classe "Exemple3"... mais pas de ton code JavaScript d'où l'erreur.

    déclare cette classe en public


    Sinon attention à la libération des ressources : ton FileReader devrait être ouvert dans un bloc try-with-ressource (ou via un try/finally sous Java 6 ou inférieur).


    a++

  3. #3
    Membre confirmé Avatar de danucc
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 70
    Par défaut
    Bingo!
    Merci adiGuba, c'était bien cela.

    Maintenant, j'ai quelque chose auquel je peux m'accrocher pour intégrer ça dans mon gros programme avec try/finally, threads etc...

    Bonne journée.
    Danilo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème pour mon application java
    Par smile2206 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/01/2007, 17h30
  2. [JNI] Problème dû aux threads Java
    Par seiryujay dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 27/11/2006, 13h14
  3. Problème dans le paquetage java.util
    Par MaxBomba dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 10/11/2006, 22h45
  4. Problème de date avec JAVA & Oracle
    Par bobic dans le forum JDBC
    Réponses: 2
    Dernier message: 02/11/2006, 12h21
  5. problème d'execution programme java
    Par mel_gasy dans le forum EDI et Outils pour Java
    Réponses: 6
    Dernier message: 08/10/2006, 01h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo