JPype将参数传递给Java

JPype将参数传递给Java,java,python,jpype,Java,Python,Jpype,我试图从python访问一个java facade类,因此我决定使用JPype。我的facade类只有一个构造函数(没有默认值)和四个参数 public facade(String a, String b, List<String> c, List<String> d){ ... } 我知道JPype正在工作。我尝试了几种包装器组合,以获得正确形式的数据,但运气不佳 相关代码: import jpype s1 = "something" s2 = "somet

我试图从python访问一个java facade类,因此我决定使用
JPype
。我的facade类只有一个构造函数(没有默认值)和四个参数

public facade(String a, String b, List<String> c, List<String> d){
    ...
}
我知道
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()
JArray(JString)与列表不匹配。您必须使用jpype.java.util.ArrayList()(或实现列表的任何内容)

因此,您的代码将如下所示:

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)

# Import Java library and class
myLib = jpype.JPackage('myLib')
Facade = myLib.Facade

# Prepare List<String> arguments
arg3 = jpype.java.util.ArrayList()
for s in s3:
    list3.add(s)
arg4 = jpype.java.util.ArrayList()
for s in s4:
    list4.add(s)

FacadeInstance = Facade(jpype.JString(s1), jpype.JString(s2), arg3, arg4)

jpype.shutdownJVM()
导入jpype
s1=“某物”
s2=“其他的东西”
s3=[“列表中的某物”]
s4=[“列表中的其他内容”]
jpype.startJVM(jpype.getDefaultJVMPath(),“-Djava.class.path=“+JavaJarDir”)
#导入Java库和类
myLib=jpype.JPackage('myLib')
Facade=myLib.Facade
#准备列表参数
arg3=jpype.java.util.ArrayList()
对于s3中的s:
列表3.添加
arg4=jpype.java.util.ArrayList()
对于s4中的s:
列表4.添加(s)
FacadeInstance=Facade(jpype.JString(s1)、jpype.JString(s2)、arg3、arg4)
jpype.shutdownJVM()

我不知道python或jpype,但是:你确定
JArray(JString)
List
的正确选项吗?在我看来,这似乎代表了一个
String[]
好问题。正如我所说的,我尝试了几种方法,包括不使用包装器的方法(例如,
Facade(s1、s2、s3、s4)
),以及使用JPype处理java接口的方法实现一些东西。如果有人有这方面的经验,请告诉我。@bnjmn您能分享一个使用Jpype从Python执行jar类函数的工作示例吗。我找不到工作样本,尝试了几个选项,但失败了,错误为“notcallable”
myArray = ["A", "B", "C"]
myList = jpype.java.util.ArrayList()
for s in myArray:
    myList.add(s)
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)

# Import Java library and class
myLib = jpype.JPackage('myLib')
Facade = myLib.Facade

# Prepare List<String> arguments
arg3 = jpype.java.util.ArrayList()
for s in s3:
    list3.add(s)
arg4 = jpype.java.util.ArrayList()
for s in s4:
    list4.add(s)

FacadeInstance = Facade(jpype.JString(s1), jpype.JString(s2), arg3, arg4)

jpype.shutdownJVM()