2013-04-11 76 views
4

我在Python中使用JPype,所以我可以調用Java函數。我無法導入我自己的jar文件。如何使用JPype在Python中導入用戶構建的jar?

我有這個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 
+1

弄來的解決方案上面,或者你可以請分享Python中調用Java方法的工作示例,我也面臨類似的問題。 – Sankalp 2017-01-22 19:15:50

回答

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") 
相關問題