Python からアクセスしようとしている Java ファサード クラスがあるので、使用することにしましたJPype
。私のファサード クラスには、4 つの引数を持つ 1 つのコンストラクター (デフォルトなし) しかありません
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()