Calling Java from Python
pip install JPype1
examples/python/java.py
from jpype import startJVM, shutdownJVM, java #startJVM(getDefaultJVMPath(), "-ea") startJVM(convertStrings=False) java.lang.System.out.println("hello world") random = java.util.Random() number1 = random.nextInt(10) number2 = random.nextInt(10) print(number1, number2) shutdownJVM()
See the jpype userguide
I tried this Python 3.7.3 running on Linux.
$ java -version openjdk version "1.8.0_242" OpenJDK Runtime Environment (build 1.8.0_242-8u242-b08-0ubuntu3~19.10-b08) OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
$ sudo apt-get install openjdk-8-jdk-headless $ javac -version javac 1.8.0_242
examples/python/java1/Calculator.java
public class Calculator { public static Integer add(Integer a, Integer b) { return a*b; } }examples/python/java1/org/pkg/MyMath.java
package org.pkg; public class MyMath { public static Integer divide(Integer a, Integer b) { return a/b; } }examples/python/java1/calc.py
from jpype import startJVM, shutdownJVM, java, addClassPath, JClass, JInt startJVM(convertStrings=False) import jpype.imports #addClassPath("org/pkg") #from org.pkg import MyMath #import MyMath #import org.pkg as p #print(p) #print(p.__class__) try: pass #print(dir(p)) #p.MyMath.divide(6, 2) #import Calculator calc = JClass('Calculator') print(calc) print(dir(calc)) res = calc.add(java.lang.Integer(2), java.lang.Integer(2)) print(res) #from org.pkg import Calculator math = JClass('org.pkg.MyMath') res = math.divide(java.lang.Integer(6), java.lang.Integer(2)) #res = math.divide(JInt(6), java.lang.Integer(2)) print(res) #calc = Calculator() #print(calc) except Exception as err: print(f"Exception: {err}")
javac Calculator.java javac org/pkg/MyMath.java python calc.py
Directory layout (before running javac):
. ├── calc.py ├── Calculator.java └── org └── pkg └── MyMath.java
Published on 2019-06-17
If you have any comments or questions, feel free to post them on the source of this page in GitHub. Source on GitHub.
Comment on this post