我使用Py4J在Python中使用Java回调函数
Java openjdk 11.0.3版
Python3
Py4J 0.10.8.1
我过去曾成功地使用Py4J在Python中使用Java回调函数。但是,我最近添加了一个新的回调类,使用的模式与我以前使用的相同,但是现在我在新类中遇到以下错误。你知道吗
AttributeError: 'JavaMember' object has no attribute '_get_object_id'
为了追踪这个问题,我在
Python。旧类StatusCallback
显示对象类型TestsJNI$StatusCallback@548ebebc
,而新类显示对象类型<py4j.java_gateway.JavaMember object at 0x7f8dc69817f0>
。你知道吗
这就解释了我得到的AttributeError
。但是我不明白为什么我没有得到py4j.java_gateway.JavaMember
而不是像TestsJNI$UploadCallback
这样的东西。你知道吗
import py4j.GatewayServer;
public class TestsJNI
{
public static boolean functionCalled = false;
public static class UploadCallback
{
public static void callback()
{
functionCalled = true;
}
// I have also tried these functions
//public static void callback(int a)
//{
// functionCalled = true;
//}
//public static void callback(int a, boolean b)
//{
// functionCalled = true;
//}
}
public static UploadCallback uploadCallback = new UploadCallback();
public static class StatusCallback
{
public static void callback()
{
functionCalled = true;
}
}
public static StatusCallback statusCallback = new StatusCallback();
public static void main(String args[])
{
TestsJNI testApp = new TestsJNI();
// Py4J server
GatewayServer server = new GatewayServer(testApp);
server.turnLoggingOff();
server.start();
}
}
from py4j.java_gateway import JavaGateway, GatewayParameters, get_field
javaCmd = ("java -cp /mnt/c/Workspace/tests/java/:.:/home/fred/.local/share/py4j/py4j0.10.8.1.jar TestsJNI")
print(javaCmd)
self.jvmProcess = Popen(javaCmd, shell=True, preexec_fn=os.setsid)
time.sleep(1.0)
# Connect to JVM via Py4J gateway
logging.getLogger("py4j").setLevel(logging.ERROR)
self.gateway = JavaGateway(gateway_parameters=GatewayParameters(auto_field=True))
entryPoint = self.gateway.entry_point
self.jni = entryPoint.autoguidanceJNI
self.jniObj = self.gateway.entry_point
testObj = self.jniObj.uploadCallback
print("upload testObj = " + str(testObj))
ret = False
testObj = self.jniObj.StatusCallback
print("status testObj = " + str(testObj));
upload testObj = <py4j.java_gateway.JavaMember object at 0x7f8dc69817f0>
status testObj = TestsJNI$StatusCallback@548ebebc
为什么Py4J给我一个py4j.java_gateway.JavaMember
对象给UploadCallback
类,给我一个TestsJNI$StatusCallback
对象给StatusCallback
类?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐