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

API standards et tierces Java Discussion :

Interpréter un morceau de code dans une application java


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Interpréter un morceau de code dans une application java
    Bonjour,

    je suis entrain d'Ecrire une application de comptabilité en java; mais je veut que les formules de calcule sont dynamique ( entrée par l'utilisateur final)
    et pour fait sa je donne a l'utilisateur une zone de texte pour Ecrire un code en java et l'application interprète ce code.
    es-que il y a une fonction qui compile en dynamique un morceaux de code java
    merci d'avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Non, parce que Java est compilé (en bytecode) et non interprété. On peut bien sûr compiler dynamiquement des classes Java, mais pour ce que tu as à faire, ce sera bien plus simple de saisir les formules en Javascript et de les interpreter dynamiquement, soit avec Nashorn en Java 8 (intégré), soit avec Rhino avant.

    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
    public class JavaScriptDemo {
     
    	public static void main(String[] args) {
     
    		ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); 
     
    		try {
    			System.out.println("10 * 50 = " + engine.eval("10 * 50"));
    			engine.getContext().setAttribute("x", 42, ScriptContext.ENGINE_SCOPE);
    			System.out.println("10 * x(=42) = " + engine.eval("10 * x"));
     
     
    		} catch (ScriptException e) {
    			e.printStackTrace();
    		}
     
    	}
     
    }
    Programme qui affiche :

    10 * 50 = 500
    10 * x(=42) = 420.0
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup mais : je voudrais savoir comment passer en paramètre une variable extraite de la base de données de l'application.
    Aussi la fonction getEngineByName() prendre en paramètre :"js" ou "javascript" ou "nashorn".

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par soubonoi Voir le message
    comment passer en paramètre une variable
    Je t'ai donné un exemple : engine.getContext().setAttribute("x", 42, ScriptContext.ENGINE_SCOPE);Ici, on passe une variable appelée x,de valeur 42. Le scope, peut être ENGINE_SCOPE (la variable est visible dans tous les scripts exécutés par cette instance de engine) ou GLOBAL_SCOPE (la variable est visible pour toutes les instances de engine).

    Tu peux passer n'importe quel objet. Par example, si tu as une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Ville {
       public final String nom;
       public final int nombreHabitants;
       public Ville(String nom, int nombreHabitants) {
          this.nom=nom;
          this.nombreHabitants=nombreHabitants;
       }
    }
    tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
    try {
     
       Ville ville1 = new Ville("Paris", 2_240_621);
       Ville ville2 = new Ville("Londres", 8_416_535);
     
       engine.getContext().setAttribute("ville1", ville1, ScriptContext.ENGINE_SCOPE);
       engine.getContext().setAttribute("ville2", ville2, ScriptContext.ENGINE_SCOPE);
       int somme = (Integer)engine.eval("ville1.nombreHabitants + ville2.nombreHabitants");
       System.out.println(somme);
     
    } catch (ScriptException e) {
       e.printStackTrace();
    }

    Citation Envoyé par soubonoi Voir le message
    Aussi la fonction getEngineByName() prendre en paramètre :"js" ou "javascript" ou "nashorn".
    Tu n'as pas besoin de t'en préoccuper avec la valeur "javascript" : ça prend le moteur par défaut.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci. Je crois que tu m'as donné le principe et je vais l'essayer.

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

Discussions similaires

  1. intégrer du code R dans une application java
    Par supcomingenieur dans le forum R
    Réponses: 3
    Dernier message: 04/06/2013, 13h48
  2. Réponses: 12
    Dernier message: 11/03/2010, 11h26
  3. Réponses: 3
    Dernier message: 23/12/2008, 22h34
  4. Utiliser ssh dans une application java
    Par Samanta dans le forum Sécurité
    Réponses: 12
    Dernier message: 28/02/2007, 16h30
  5. injection de code dans une application
    Par youp_db dans le forum C
    Réponses: 16
    Dernier message: 21/07/2006, 12h33

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