2010-04-20 4 views
10

Je suis en train d'appeler Jython à partir d'une application Java 6 en utilisant javax.script:Appel de Python depuis Java via un moteur de script (jython)?

import javax.script.ScriptEngine; 
import javax.script.ScriptEngineManager; 
import javax.script.ScriptException; 

public class jythonEx 
{ 
    public static void main (String args[]) throws ScriptException 
    { 
     ScriptEngineManager mgr = new ScriptEngineManager(); 
     ScriptEngine pyEngine = mgr.getEngineByName("python"); 
     try { 
      pyEngine.eval("print \"Python - Hello, world!\""); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     }  
    } 
} 

Cela provoque une NullPointerException:

java.lang.NullPointerException 
     at jythonEx.main(jythonEx.java:12) 

Est-ce que quelqu'un a une idée de ce que je fais mal ici?

Edit:

Merci pour les réponses! J'ai ajouté jython.jar au classpath et il fonctionne correctement:

java -cp "./;jython.jar" jythonEx 
+0

Lequel est la ligne 12? pyEngine.eval ("") ;? – ilikeorangutans

+0

@ilikeorangutans: Oui, c'est la ligne 12. – OscarRyz

+0

C'est vrai. Je présume que le ScriptEngineManager ne peut pas trouver le moteur python, mais je ne vois pas ce que je fais de mal qui causerait ça ... – griffin

Répondre

15

Vous devez d'abord enregistrer votre moteur.

De: ScriptEngineManager.getEngineByName:

[...] recherche d'abord un ScriptEngineFactory qui a été enregistré comme une poignée [...] Retourne NULL si aucune usine n'a été trouvée

Le guide de l'utilisateur dit to use it with JSR-223 vous devez:

au Jython 2. 5.1 une implémentation de JSR 223 est incluse dans jython.jar. Ajoutez simplement jython à votre CLASSPATH et demandez le moteur de script python.

Avez-vous déjà fait cela?

EDIT À propos de votre commentaire: Je pense que vous devriez ouvrir une nouvelle question, vous obtiendrez de meilleures réponses.

+0

Non, je n'ai jamais fait ça, merci! J'ai déjà utilisé JavaScript avec javax.script sans rien faire, donc j'ai clairement manqué cette étape. Laissez-moi essayer maintenant ... – griffin

+0

@griffin Great !, probablement que cela fera l'affaire. Faites-nous savoir si cela fonctionnerait vous? – OscarRyz

+0

@Oscar: Merci; ça a fait l'affaire! – griffin

2

Vous devrez probablement enregistrer un ScriptEngineFactory pour 'python'

Questions connexes