// Do this once per session, e.g. an __init__
JNI_CreateJavaVM(&jvm, &env, &vm_args);
// When needed invoke Example.foo(int)
jclass cls =
env->FindClass("Example"); jmethodID
mid = env->GetStaticMethodID(cls,
"foo", "(I)V");
env->CallStaticVoidMethod(cls, mid,100);
如果您想要JavaPython钩子,那么最好使用Jython,然后通过这种方式跨边界调用。
但是,是的,可以从Java调用外部库;但是您不需要GCJ来完成这一点。相反,您可以在Python运行时中启动一个JVM实例,然后为此调用方法。
JNI invocation spec
基本上,您希望在启动时创建VM,然后在需要时调用方法:
您可以编写一些简单的C包装器代码,以便从ctypes中为您调用此代码。然而,JavaVM是一个结构的结构,它包含许多void*指针,因此直接执行它可能不是件小事。
相关问题 更多 >
编程相关推荐