1

私は (Java/C++/C#) の初心者プログラマーで、Python も知っています。Java エンジンのメソッドにアクセスできる Jython スクリプトを呼び出すことができる Java で GameEngine を作成しようとしています。

私はこれにアプローチする方法について無知です。私はすでに数週間の調査を行ってきましたが、私の質問には何も答えていません。あれは:

親クラスによって実行される JythonScript から、親クラスのメソッドを呼び出すにはどうすればよいですか?

- - - - - - - - - - - - - - - - - -アップデート - - - - - - - --------------------------------------

さて、ここでの答えはいくつかのことを理解するのに役立ちましたが、私の問題は解決しませんでした. このようなものがうまくいくかどうか私が思っていたこと:

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()

これは可能ですか?これを行う方法はありますか?

- - - - - - - - - - - - - - - - - -アップデート - - - - - - - --------------------------------------

Jython の場所: "C:\jython2.7a2\jython.jar" 私の職場の場所: "C:\Documents and Settings\PC\Desktop\Jython*.java" 私のローカル JtyhonJar の場所: "C:\Documents and設定\PC\デスクトップ\Jython\jython.jar"

私が書いたコンパイラ: "@echo off" "javac -classpath C:\jython2.7a2\jython.jar *.java" "echo done" "pause >nul"

今ではコンパイルさえしません... (コードが少し変更されているかどうかを確認するためにコードを少し変更しましたが、変更されていません!)

4

2 に答える 2

1

jython.jar が必要

  1. Java で Python コードを実行します。

    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. JavaでPythonスクリプトメソッドを呼び出す.

    test.py という名前の python スクリプト ファイル

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

    ジャバコード:

    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. JavaでPythonスクリプトを実行する.

    test.py という名前の python スクリプト ファイル:

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

    ジャバコード:

    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");
        }
    }
    
于 2012-06-25T02:49:13.377 に答える
1

はい、この方法は問題ありませんが、コンストラクター メソッドで Python スクリプトを実行することはできません。次のコードを参照してください。PythonScriptTest クラスを実行すると、最初に Python スクリプトが実行され、次に Python スクリプトが PythonScriptTest.SpawnPlayer() メソッドを呼び出します。

ジャバコード:

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 ##################");
    }
}

util.py という名前の Python スクリプト:

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()
于 2012-06-28T04:03:42.843 に答える