2009-09-10 8 views
0

Je ne suis pas vraiment sûr comment je peux expliquer cela, mais voilà:Exécution du script à l'intérieur méthode avec BeanShell

Je veux être en mesure de « insérer » certaines commandes dans des parties de mon code qui seront chargés de fichiers externes. Pour analyser et exécuter ces commandes, je dois probablement utiliser des scripts comme la méthode eval de BeanShell. Le problème est qu'il ne semble pas reconnaître l'instance/méthode à l'intérieur de laquelle il se trouve. Comme un exemple très basique, je veux faire quelque chose comme

public void somethingHappens() 
    { 
     Foo foo = new Foo(); 
     Interpreter i = new Interpreter(); 
     i.eval("print(foo.getName());"); 
    } 

Est-ce possible? Dois-je utiliser d'autres outils de script?

Répondre

1

Si vous utilisez la version 1.6, vous pouvez utiliser le support JavaScript intégré. Le Java Scripting Programmer's Guide explique comment importer des classes Java dans votre script.

L'exemple de code 9 dans ce article explique comment transmettre des objets dans la portée du script.

+0

Merci, je ne savais pas sur la méthode de vente dans la classe ScriptEngine. Je crois que cela va résoudre mes problèmes jusqu'à présent. –

0

En utilisant beanshell, ceci est quelque chose que vous pouvez essayer

package beanshell; 

import bsh.EvalError; 
import bsh.Interpreter; 

public class DemoExample { 

    public static void main(String [] args) throws EvalError { 
     Interpreter i = new bsh.Interpreter(); 
     String usrIp = "if(\"abc\".equals(\"abc\")){" 
       + "demoExmp.printValue(\"Rohit\");" 
       + "}"; 

     i.eval("" 
       + "import beanshell.DemoExample;" 
       + "DemoExample demoExmp = new beanshell.DemoExample();" 
       + ""+usrIp); 
    } 

    public static void printValue(String strVal){ 
     System.out.println("Printing Value "+strVal); 
    } 
} 
Questions connexes