2012-06-25 6 views
1

Je suis un programmeur novice en (Java/C++/C#) et je connais aussi Python. J'essaye de créer un GameEngine en Java qui peut appeler des scripts Jython, qui ont accès aux méthodes dans le moteur Java. Je n'ai aucune idée de la façon d'aborder cette question. J'ai déjà fait des semaines de recherche et rien n'a répondu à ma question; c'est-à-dire:Comment appeler les méthodes Java à partir de Jython qui est exécutée par la classe Java?

Comment puis-je appeler des méthodes dans ma classe Parent, à partir de mon JythonScript, qui est exécuté par ma classe Parent?

----------------------------------- MISE À JOUR ---------- -----------------------------------------

D'accord, la réponse ici m'a aidé à comprendre certaines choses, mais cela n'a pas résolu mon problème. Ce que je me demandais si quelque chose comme cela fonctionnerait:

class MyJavaClass 
{ 
    Public MyJavaClass() 
    { 
     PythonInterpreter interp = new PythonInterpreter; 
     interp.execfile("MyJythonScript.py"); 
     interp.exec("InGameCommand"); 
    } 

    public void SpawnPlayer() 
    {} 

    public void KillPlayer() 
    {} 

} 

MyJythonScript.py

Def InGameCommand(): 
    SpawnPlayer() 
    KillPlayer() 

Est-ce même possible? Il y a un moyen de le faire?

----------------------------------- MISE À JOUR ---------- -----------------------------------------

Emplacement à Jython: " C: \ jython2.7a2 \ jython.jar " Emplacement de mon travail:" C: \ Documents and Settings \ PC \ Desktop \ Jython * .java " Emplacement vers mon JtyhonJar local:" C: \ Documents and Settings \ PC \ Desktop \ Jython \ jython.jar "

mon compilateur je l'ai écrit: "@echo off" "javac -classpath C: \ jython2.7a2 \ jython.jar * .java" "echo done" " pause> nul "

maintenant il ne compile même pas ... (je l'ai changé petites choses dans mon code pour voir si elle a changé et il n'a pas!)

+0

OH et si elle aide à clarifier: classe Java contient la classe classe Java SpawnEntity() executs JythonScript Script Jython Appelle SpawnEntity() C'est en gros ce que je veux vraiment accomplir^ – Luft

Répondre

0

Oui, cette façon est très bien, mais vous ne pouvez pas exécuter un script python dans la méthode constructeur, le cas échéant, il sera récursive mort à votre code. veuillez voir le code suivant. vous exécutez la classe PythonScriptTest, elle exécute d'abord le script python, puis le script python appelle la méthode PythonScriptTest.SpawnPlayer().

code java:

package com.xxx.jython; 
import org.python.core.PyFunction; 
import org.python.util.PythonInterpreter; 

public class PythonScriptTest { 

    public static void main(String[] args) { 
     PythonScriptTest f = new PythonScriptTest(); 
     f.executePythonScript(); 
    } 

    public PythonScriptTest(){ 
    } 

    public void executePythonScript() { 
      PythonInterpreter interpreter = new PythonInterpreter(); 
      interpreter.execfile("/home/XXX/XXX/util.py"); 
      PyFunction pyFuntion = (PyFunction) interpreter.get("InGameCommand", PyFunction.class); 

      pyFuntion.__call__(); 
    } 

    public void SpawnPlayer() { 
      System.out.println("Run SpawnPlayer method ##################"); 
    } 
} 

scripts Python, nommé util.py:

import sys.path as path 
# the following path is eclipse output class dir 
# does not contain java class package path. 
path.append("/home/XXX/XXX/Test/bin") 
from com.xxx.jython import PythonScriptTest 

def add(a, b): 
    return a + b 

def InGameCommand(): 
    myJava = PythonScriptTest() 
    myJava.SpawnPlayer() 
+1

oh d'accord: D merci beaucoup! J'ai juste besoin d'obtenir mes chemins pour travailler et c'est "AufWiedersehen!" à ces problèmes! Vous basculez, monsieur. – Luft

+0

Serai-je capable de manipuler des variables dans la classe java qui exécute le jython (étant manipulé par le jython)? – Luft

+0

k..I a finalement obtenu Jython travailler ... maintenant je dois cela fonctionne – Luft

1

besoin de jython.jar

  1. exécuter du code python dans Java.

    import org.python.util.PythonInterpreter; 
    public class PythonScript{ 
        public static void main(String args[]){ 
         PythonInterpreter interpreter = new PythonInterpreter(); 
         interpreter.exec("days=('One','Two','Three','Four'); "); 
         interpreter.exec("print days[1];");  
        } 
    } 
    
  2. invoquer la méthode de script python dans java.

    fichier script python, nommé test.py

    code java:

    import org.python.core.PyFunction; 
    import org.python.core.PyInteger; 
    import org.python.core.PyObject; 
    import org.python.util.PythonInterpreter; 
    
    public class PythonScript { 
        public static void main(String args[]) { 
    
         PythonInterpreter interpreter = new PythonInterpreter(); 
         interpreter.execfile("/home/XXX/XXX/test.py"); 
         PyFunction pyFuntion = (PyFunction)interpreter.get("add",PyFunction.class); 
    
         int a = 10, b = 20 ; 
         PyObject pyobj = pyFuntion.__call__(new PyInteger(a), new PyInteger(b)); 
         System.out.println("result = " + pyobj.toString()); 
        } 
    } 
    
  3. run script python en java

    fichier script python, nommé test.py:

    number=[1,10,4,30,7,8,40] 
    print number 
    number.sort() 
    print number 
    

    code java:

    import org.python.util.PythonInterpreter; 
    
    public class FirstJavaScript { 
    
        public static void main(String args[]) { 
         PythonInterpreter interpreter = new PythonInterpreter(); 
         interpreter.execfile("/home/XXX/XXX/test.py"); 
        } 
    } 
    
+0

Merci pour votre réponse! Je vais devoir regarder ce code pour voir comment cela fonctionne, mais en attendant, tout ce que je peux dire, c'est merci :) – Luft

Questions connexes