2010-04-20 10 views
10

Ich versuche, Jython von einem Java-6-Anwendung aufrufen javax.script mit:Aufruf von Python von Java über Scripting Engine (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(); 
     }  
    } 
} 

Dies verursacht eine Nullpointer:

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

eine Ahnung, jemand tut, was falsch ich hier tue?

Edit:

Danke für die Antworten! Ich habe jython.jar zum Classpath hinzugefügt und es läuft ordnungsgemäß:

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

Welches ist Zeile 12? pyEngine.eval (""); – ilikeorangutans

+0

@ilikeorangutans: Ja, das ist die Linie 12. – OscarRyz

+0

Das stimmt. Ich nehme an, dass der ScriptEngineManager die Python-Engine nicht finden kann, aber ich sehe nicht, was ich falsch mache, das würde das verursachen ... – griffin

Antwort

15

Sie müssen zuerst Ihren Motor registrieren.

Von: ScriptEngineManager.getEngineByName:

[...] zunächst nach einem ScriptEngineFactory, die als Griff registriert wurde [...] Gibt null zurück, wenn kein solches Werk gefunden wurde

Die Bedienungsanleitung sagt to use it with JSR-223 müssen Sie:

Ab Jython 2. 5.1 Eine Implementierung von JSR 223 ist in jython.jar gebündelt. Fügen Sie einfach jython zu Ihrem CLASSPATH hinzu und fragen Sie nach der Python-Skript-Engine.

Haben Sie das schon gemacht?

EDIT über Ihren Kommentar: Ich denke, Sie eine neue Frage öffnen sollen, werden Sie bessere Antworten zu bekommen.

+0

Nein, das habe ich nie getan, danke! Ich habe JavaScript vorher mit javax.script benutzt, ohne etwas zu tun, also habe ich diesen Schritt eindeutig übersehen. Lass es mich jetzt versuchen ... – griffin

+0

@griffin Great !, wahrscheinlich wird das tun. Lass es uns wissen, wenn es funktioniert, oder? – OscarRyz

+0

@Oscar: Danke; das hat den Trick gemacht! – griffin

2

Sie müssten wahrscheinlich eine ScriptEngineFactory für 'Python' registrieren