Có thể sử dụng mã Java trong Python không?

pip install JPype1

ví dụ/trăn/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[]

Xem hướng dẫn sử dụng jpype

Tôi đã thử Python 3 này. 7. 3 chạy trên 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

ví dụ/trăn/java1/Máy tính. java

public class Calculator {
    public static Integer add[Integer a, Integer b] {
        return a*b;
    }
}
ví dụ/python/java1/org/pkg/MyMath. java_______5_______ví dụ/python/java1/calc. py_______6_______
javac Calculator.java
javac org/pkg/MyMath.java
python calc.py

Bố cục thư mục [trước khi chạy javac]

________số 8_______

Javabridge tải một lớp Java, org. hồ sơ di động. javabridge. CPython, có thể được sử dụng để thực thi mã Python. Lớp này có thể được sử dụng trong mã Java được gọi từ trình thông dịch Python hoặc nó có thể được sử dụng trong Java để chạy Python nhúng trong Java

lớp org.cellprofiler.javascript.CPython []

Lớp CPython liên kết trình thông dịch Python với JVM và cung cấp khả năng thực thi các tập lệnh Python

exec []Tranh luận
  • tập lệnh – Tập lệnh Python để thực thi
  • locals – Bản đồ tên của đối tượng Java trong bối cảnh thực thi Python tới chính đối tượng Java. Các đối tượng trong bản đồ có phạm vi cục bộ. Giá trị null có thể được sử dụng nếu không cần xác định cục bộ
  • toàn cầu – Bản đồ tên của đối tượng Java với chính đối tượng Java. Các đối tượng trong bản đồ có phạm vi toàn cầu. Nếu một giá trị null được sử dụng, thì globals mặc định là toàn cục dựng sẵn

exec[] thực thi tập lệnh được truyền trong trình thông dịch Python. Trình thông dịch thêm các toàn cầu dựng sẵn vào các toàn cầu được truyền vào, sau đó thực thi tập lệnh. Cùng một bản đồ có thể được sử dụng cho cả địa phương và toàn cầu - chế độ này có vẻ quen thuộc hơn với những người thường xuyên viết mã bằng Python và mong đợi câu lệnh import có tác dụng toàn cầu

Không có phương pháp eval. Bạn có thể truy xuất các giá trị bằng cách chuyển một đối tượng vùng chứa, chẳng hạn như một mảng hoặc bản đồ làm một trong các đối tượng cục bộ và bạn có thể đặt các phần tử trong đối tượng với các giá trị được trả về

Thí dụ

class MyClass {
    static final CPython cpython = CPython[];

    public List whereIsWaldo[String root] {
         ArrayList result = new ArrayList[];
         Hashtable locals = new Hashtable[];
         locals.put["result", result];
         locals.put["root", root];
         StringBuilder script = new StringBuilder[];
         script.append["import os\n"];
         script.append["import javabridge\n"];
         script.append["root = javabridge.to_string[root]"];
         script.append["result = javabridge.JWrapper[result]"];
         script.append["for path, dirnames, filenames in os.walk[root]:\n"];
         script.append["  if 'waldo' in filenames:"];
         script.append["     result.add[path]"];
         cpython.exec[script.toString[], locals, null];
         return result;
    }

}

execute []

import javabridge

cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][]
d = javabridge.JClassWrapper['java.util.Hashtable'][]
result = javabridge.JClassWrapper['java.util.ArrayList'][]
d.put["result", result]
cpython.execute[
    'import javabridge\n'
    'x = { "foo":"bar"}\n'
    'ref_id = javabridge.create_and_lock_jref[x]\n'
    'javabridge.JWrapper[result].add[ref_id]', d, d]
cpython.execute[
    'import javabridge\n'
    'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n'
    'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n'
    'javabridge.unlock_jref[ref_id]', d, d]
0 là một từ đồng nghĩa với
import javabridge

cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][]
d = javabridge.JClassWrapper['java.util.Hashtable'][]
result = javabridge.JClassWrapper['java.util.ArrayList'][]
d.put["result", result]
cpython.execute[
    'import javabridge\n'
    'x = { "foo":"bar"}\n'
    'ref_id = javabridge.create_and_lock_jref[x]\n'
    'javabridge.JWrapper[result].add[ref_id]', d, d]
cpython.execute[
    'import javabridge\n'
    'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n'
    'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n'
    'javabridge.unlock_jref[ref_id]', d, d]
1 là một từ khóa Python. Sử dụng
import javabridge

cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][]
d = javabridge.JClassWrapper['java.util.Hashtable'][]
result = javabridge.JClassWrapper['java.util.ArrayList'][]
d.put["result", result]
cpython.execute[
    'import javabridge\n'
    'x = { "foo":"bar"}\n'
    'ref_id = javabridge.create_and_lock_jref[x]\n'
    'javabridge.JWrapper[result].add[ref_id]', d, d]
cpython.execute[
    'import javabridge\n'
    'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n'
    'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n'
    'javabridge.unlock_jref[ref_id]', d, d]
0 thay cho
import javabridge

cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][]
d = javabridge.JClassWrapper['java.util.Hashtable'][]
result = javabridge.JClassWrapper['java.util.ArrayList'][]
d.put["result", result]
cpython.execute[
    'import javabridge\n'
    'x = { "foo":"bar"}\n'
    'ref_id = javabridge.create_and_lock_jref[x]\n'
    'javabridge.JWrapper[result].add[ref_id]', d, d]
cpython.execute[
    'import javabridge\n'
    'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n'
    'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n'
    'javabridge.unlock_jref[ref_id]', d, d]
1 để gọi Python từ CWrapper javabridge cho CPython

Duy trì các tham chiếu đến các giá trị Python

Bạn có thể muốn duy trì các tham chiếu đến các đối tượng Python trong quá trình thực thi tập lệnh. Các hàm sau đây cho phép người gọi Java tham chiếu đến giá trị Python [có thể là loại cơ sở hoặc đối tượng] thông qua mã thông báo có thể được trao đổi lấy giá trị bất kỳ lúc nào. Mã Java chịu trách nhiệm quản lý thời gian tồn tại của tham chiếu. Thí dụ

Tôi có thể sử dụng mã Java trong Python không?

Thêm cho đầy đủ. tất nhiên bạn có thể sử dụng mã java trong tập lệnh python . Bạn chỉ cần biên dịch mã Java, sau đó bạn thực hiện cuộc gọi quy trình con để kích hoạt chạy JVM. Nhưng điều gần nhất với một giải pháp hợp lý là jython. Mặc dù điều đó ngụ ý rằng về mặt kỹ thuật, bạn chạy một JVM đã bật python.

Làm cách nào để chạy chương trình Java bằng Python?

Bài tập -- Tạo tập lệnh Jython nhỏ. .
Bao gồm một lớp trong tập lệnh của bạn để tạo một phiên bản java. .
Làm cho tập lệnh vừa "có thể chạy" vừa "có thể nhập"
Từ trình thông dịch Jython, nhập tập lệnh và tạo một thể hiện của lớp
Từ dòng lệnh, sử dụng jython để chạy tập lệnh

Bạn có thể nhập Java bằng Python không?

Bạn có thể chọn nhập gói Java cấp cao nhất [chẳng hạn như java ] thay vì các gói con cụ thể [chẳng hạn như java. lang ] . Mã Python của bạn có khả năng truy cập tất cả các gói con khi bạn nhập gói cấp cao nhất. Ví dụ: sau khi nhập java, mã của bạn có thể sử dụng các lớp java.

Làm cách nào để kết nối mã Python với mã Java?

Bắt đầu .
Chèn một đối số Chuỗi sẽ được sử dụng bởi mã Python. Đối số tập lệnh Python của chúng tôi có tên user_name sẽ nhận giá trị của biến tên mã Java của chúng tôi
Thực thi mã Python bằng phương thức exec[]
Nhận giá trị trả về từ Python trở lại Java

Chủ Đề