【问题标题】:Running a Java class within a Python project在 Python 项目中运行 Java 类
【发布时间】:2015-10-05 18:13:11
【问题描述】:

我正在运行一个 Python 项目,但有一个库 (sikuli) 在 Java 中加载起来更容易。我想知道是否有某种方法可以授予我的 python 程序访问 Java 类的权限,并以某种方式让 JVM 解释从 Python 对 Java 类的调用。

另一种选择是使用我所有的方法创建一个.jar,然后在 Python 中使用.subprocess 命令运行带有参数的 jar,这有点混乱,但也可以完成工作。

【问题讨论】:

标签: java python


【解决方案1】:

看看Pyjnius。它允许您将 Java 类作为 Python 对象导入,并以透明的 Python 方式公开其方法。

基本示例:在 JAR 文件中使用类

java_resource_jar_path = "/path/to/jar/directory"
jnius_config.set_classpath(java_resource_jar_path)

from jnius import autoclass
# from jnius import JavaException  
# You might have to import JavaException if your class happens to throw exceptions

TheJavaClass = autoclass(path.in.the.jar.file.to.class) # No ".class", no parentheses
python_instance_of_the_Java_class = TheJavaClass()

此时,python_instance_of_the_Java_class 拥有您的 Java 类的所有方法。

【讨论】:

  • 谢谢,我去看看。在独立的 java 类中,我怎么会担心导入 sikuli-java.jar?在 java 中,我将它添加到项目库中,但是如何在 python 通过 pyjnius 引用的独立 .java 文件中执行此操作?
  • @k9b 我添加了一个示例,向您展示如何使用 JAR 文件。
  • 非常感谢。很有道理!
【解决方案2】:

Jpype1 允许您在类路径中使用自定义 jar 启动 JVM,这允许您通过 Python 虚拟使用任何第三方 Java 库。

import jpype

jpype.startJVM(jpype.getDefaultJVMPath(), '-ae', "-Djava.class.path=./MyLibrary.jar")
pkg = jpype.JPackage('com').site.myclasses
javaobj = pkg.MyClass()
javaobj.javaMethod()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 2023-03-11
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多