Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JPype在Python中导入用户构建的JAR?_Java_Python_Jpype - Fatal编程技术网

Java 如何使用JPype在Python中导入用户构建的JAR?

Java 如何使用JPype在Python中导入用户构建的JAR?,java,python,jpype,Java,Python,Jpype,我在Python中使用JPype,因此可以调用Java函数。我在导入自己的jar文件时遇到问题 我有一个jar:/home/di/eclipse\u plugins/plugins/org.eclipse.birt.report.engine\u 4.2.1.v20120820.jar 在org.eclipse.birt.report.engine.api包中有一个EngineConfig类定义。我正在尝试实例化并使用这个jar中的类。在常规Java中,这就是我想要的: import org.e

我在Python中使用JPype,因此可以调用Java函数。我在导入自己的jar文件时遇到问题

我有一个jar:
/home/di/eclipse\u plugins/plugins/org.eclipse.birt.report.engine\u 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
回溯(最近一次呼叫最后一次):
文件“test.py”,第15行,在
engineConfig.setLogConfig()
文件“/usr/lib64/python2.6/site packages/jpype/_jpackage.py”,第53行,在调用中__
raise TypeError,“包”+自身。\u名称+“不可调用”
TypeError:包org.eclipse.birt.report.engine.api.EngineConfig.setLogConfig不可调用

我无法重现完全相同的错误(相反,我得到了一个“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")

您是否获得了上述解决方案,或者您是否可以分享一个从Python调用java方法的工作示例,我也面临着类似的问题。因此,需要记住的一件非常重要的事情是,当您启动JVM时,您的类所需的所有类都必须位于
jpype
的类路径上(或稍后添加到JVM的类路径中)。否则,jpype在尝试查找类时将在内部“静默”失败:当JVM尝试“查找”该类时,它首先确保类中的所有
import
s都已满足要求——否则,JVM将无法找到该类。