我是(Java / C ++ / C#)的新手程序员,我也懂Python。我正在尝试在Java中创建一个可以调用Jython脚本的GameEngine,它可以访问Java引擎中的方法。
我对如何处理这个问题毫无头绪。我已经做了数周的研究,没有回答我的问题;那就是:
如何从我的父类执行的JythonScript中调用Parent类中的方法?
----------------------------------- UPDATE ----------- ----------------------------------------
好的,这里的答案帮助我理解了一些事情,但它并没有解决我的问题。 我想知道这样的事情是否会奏效:
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()
这甚至可能吗?有办法做到这一点吗?
----------------------------------- UPDATE ----------- ----------------------------------------
Jython的位置:“C:\ jython2.7a2 \ jython.jar” 我的工作地点:“C:\ Documents and Settings \ PC \ Desktop \ Jython * .java” 我当地的JtyhonJar的位置:“C:\ Documents and Settings \ PC \ Desktop \ Jython \ jython.jar”
我的编译器我写道: “@echo off” “javac -classpath C:\ jython2.7a2 \ jython.jar * .java” “回声完成” “暂停> nul”
现在它甚至都没有编译...(我在代码中改变了一些东西,看它是否发生了变化,但它没有!)
答案 0 :(得分:1)
需要jython.jar
在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];");
}
}
在java中调用python脚本方法。
python脚本文件,名为test.py
def add(a, b):
return a + b
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());
}
}
在java中运行python脚本
python脚本文件,名为test.py:
number=[1,10,4,30,7,8,40]
print number
number.sort()
print number
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");
}
}
答案 1 :(得分:0)
是的,这种方式很好,但你不能在构造函数方法中运行python脚本,如果是这样,它将在你的代码中死亡递归。请参阅以下代码。你运行PythonScriptTest类,它会先运行python脚本,然后python脚本会调用PythonScriptTest.SpawnPlayer()方法。
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 ##################");
}
}
Python脚本,名为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()