Disculpas por resucitar el hilo, pero creo que tengo una mejor respuesta :-)
También es posible usar Py4J que tiene dos partes: una biblioteca que se ejecuta en CPython (o cualquier intérprete de Python para el caso) y una biblioteca que se ejecuta en la máquina virtual Java a la que desea llamar.
Hay un ejemplo en la página principal y un montón de documentación, pero en esencia, que acaba de llamar a métodos Java desde el código Python como si fueran métodos Python:
>>> from py4j.java_gateway import JavaGateway
>>> gateway = JavaGateway() # connect to the JVM
>>> java_object = gateway.jvm.mypackage.MyClass() # invoke constructor
>>> other_object = java_object.doThat()
>>> other_object.doThis(1,'abc')
>>> gateway.jvm.java.lang.System.out.println('Hello World!') # call a static method
La comunicación se realiza a través de sockets en lugar de JNI.
responsabilidad: yo soy el autor de Py4J
Los enlaces van a una versión obsoleta. Encuentre la correcta aquí: https://pypi.python.org/pypi/JPype1 https://github.com/originell/jpype y los documentos aquí: https://jpype.readthedocs.io/en/latest/ – bastian