JPype は、JVM
から直接インスタンス化できるため、素晴らしいプロジェクトPython
です。
残念ながら、私は最初のベイビーステップで立ち往生しました。
A.java
ソースコード ( )がありlocated in C:\tmp folder
ます:
class A {
public A() {
super();
}
public String sayHi() {
return("Hello");
}
}
以下を使用して、クラスにコンパイルされました。javac A.java
したがって、A.class はC:\tmp
フォルダーにあります。
次のPython
ソースコードがあります。
import os
import jpype
jpype.startJVM(jpype.getDefaultJVMPath(), '-ea', '-Djava.class.path=c:\\tmp')
A = jpype.JClass("A")
a = A()
print a.sayHi()
jpype.shutdownJVM()
実行すると、次のエラーが表示されます。
C:\tmp>jpype_test.py
Traceback (most recent call last):
File "C:\tmp\jpype_test.py", line 10, in <module>
A = jpype.JClass("A")
File "C:\Python27\lib\site-packages\jpype\_jclass.py", line 54, in JClass
raise _RUNTIMEEXCEPTION.PYEXC("Class %s not found" % name)
jpype._jexception.ExceptionPyRaisable: java.lang.Exception: Class A not found
Aクラスが見つからないので、おそらくCLASSPATH関連の問題ですが、何が間違っているのかわかりません。
手がかりはありますか?
編集1:
問題は解決しません。しかし、私の質問に追加するために、java.util のようなネイティブ Java ライブラリを使用すると、コードはエラーなしで実行されます。たとえば、次のコードは機能します。
import jpype
jpype.startJVM(jpype.getDefaultJVMPath())
util = jpype.JPackage("java.util")
al = util.ArrayList()
al.add(1)
al.add(2)
print al.size()
jpype.shutdownJVM()
そして2を返します。
編集2:
問題は解決しました。以下の回答を参照してください...