3
我有一个java门面类我试图从python访问,所以我决定使用JPype
。我的门面类只有一个构造函数(无默认值)四ARGSJPype将参数传递给Java
public facade(String a, String b, List<String> c, List<String> d){
...
}
我似乎无法初始化类的新实例时,为了获得正确的类型。我所尝试的一切给出了相同的错误:
File ".../main.py", line 34, in __init__
facadeinstance = Facade(jpype.JString(s1), jpype.JString(s2),jpype.JArray(jpype.java.lang.String, 1)(s3), jpype.JArray(jpype.java.lang.String, 1)(s4))
File "/usr/local/lib/python2.7/dist-packages/jpype/_jclass.py", line 79, in _javaInit
self.__javaobject__ = self.__class__.__javaclass__.newClassInstance(*args)
RuntimeError: No matching overloads found. at src/native/common/jp_method.cpp:121
我知道JPype
正在工作。我已经尝试了几种包装的组合,以正确的形式获取数据,但没有运气。
相关代码:
import jpype
s1 = "something"
s2 = "something else"
s3 = ["something in a list"]
s4 = ["Something else in a list"]
jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=" + JavaJarDir)
myLib = jpype.JPackage('myLib')
Facade = myLib.Facade # class loads fine, resources printed to stdout
# The error occurs on the next line
FacadeInstance = Facade(jpype.JString(s1), jpype.JString(s2), jpype.JArray(jpype.java.lang.String, 1)(s3), jpype.JArray(jpype.java.lang.String, 1)(s4))
jpype.shutdownJVM()
我不知道蟒蛇或jpype的事情,但:你确定'JArray(的jstring)'是正确的事情'清单'?听起来像它会代表'String []' –
zapl
好问题。正如我所说的,我尝试了几个东西,包括没有包装的东西(例如'Facade(s1,s2,s3,s4)'),以及用JPype处理java接口的方式实现了一些东西。如果有人有这方面的经验,请让我知道。 – bnjmn
@bnjmn您可以使用Jpype来分享一个从Python执行jar类的函数的工作示例。我无法找到一个工作示例,尝试了几个选项但失败,出现错误“不可调用” – Sankalp