1

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:

問題は解決しました。以下の回答を参照してください...

4

2 に答える 2

0

次のようにパスを変更してみてください。

    jpype.startJVM(jpype.getDefaultJVMPath(), '-ea', '-Djava.class.path=c:\\tmp\')
于 2016-04-26T07:07:40.393 に答える