5

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
4

1 に答える 1

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")
于 2013-07-11T12:28:08.870 に答える