【问题标题】:How do I import user built jars in Python using JPype?如何使用 JPype 在 Python 中导入用户构建的 jar?
【发布时间】:2013-04-04 06:02:08
【问题描述】:

我在 Python 中使用 JPype,所以我可以调用 Java 函数。我无法导入自己的 jar 文件。

我有这个罐子:/home/di/eclipse_plugins/plugins/org.eclipse.birt.report.engine_4.2.1.v20120820.jar

org.eclipse.birt.report.engine.api 包中有一个EngineConfig 类定义。我正在尝试实例化并使用我在那个 jar 中的这个类。在常规 Java 中,这就是我所拥有的:

import org.eclipse.birt.report.engine.api.EngineConfig;

EngineConfig config = new EngineConfig();     
config.setLogConfig("/home/di/logs");

我在 Python 中有这个:

import jpype
from jpype import *

jvmPath = jpype.getDefaultJVMPath() 
jpype.startJVM(jvmPath, "-Djava.class.path=/home/di/eclipse_plugins/plugins/*.jar")
engineConfig = JPackage("org").eclipse.birt.report.engine.api.EngineConfig
engineConfig.setLogConfig("/home/di/logs")
jpype.shutdownJVM() 

但是,当我运行它时,我得到了这个错误:

Traceback (most recent call last):
  File "test.py", line 15, in <module>
    engineConfig.setLogConfig()
  File "/usr/lib64/python2.6/site-packages/jpype/_jpackage.py", line 53, in __call__
    raise TypeError, "Package "+self.__name+" is not Callable"
TypeError: Package org.eclipse.birt.report.engine.api.EngineConfig.setLogConfig is not Callable

【问题讨论】:

  • 您是否得到了上述解决方案,或者您能否分享一个从 Python 调用 java 方法的工作示例,我也面临类似的问题。
  • 因此,要记住的最重要的事情之一是您的班级需要的所有班级必须jpype的启动 JVM 时的类路径(或稍后添加到 JVM 的类路径)。否则,jpype 在尝试查找类时会“默默地”在内部失败:当 JVM 尝试“查找”类时,它首先确保类中的所有 imports 都已得到满足——如果没有, JVM 将无法找到该类。

标签: java python jpype


【解决方案1】:

我无法重现完全相同的错误(相反,我收到了“RuntimeError:未找到匹配的重载”)。不过,我在您的 Python 代码中发现了一个问题:

engineConfig = JPackage("org").eclipse.birt.report.engine.api.EngineConfig

您在engineConfig 中得到的是一个类。

setLogConfig() 不是静态方法,所以必须先实例化 EngineConfig 类:

# Get EngineConfig class
EngineConfig = JPackage("org").eclipse.birt.report.engine.api.EngineConfig
# Instantiate EngineConfig
engineConfig = EngineConfig()
# Call method
engineConfig.setLogConfig("/home/di/logs")

【讨论】:

    猜你喜欢
    • 2017-10-17
    • 2020-11-07
    • 2021-11-13
    • 2019-09-07
    • 2020-03-30
    • 2014-11-28
    • 1970-01-01
    • 2020-06-23
    • 2018-06-24
    相关资源
    最近更新 更多