jpype로 사용자 정의 Java 클래스 사용 : 패키지 호출 가능 오류가 아닙니다.

StackOverflow https://stackoverflow.com//questions/21006124

  •  21-12-2019
  •  | 
  •  

문제

JPYPE 사용의 매우 간단한 예제를 사용하려고합니다 (버전 : 0.5.4.6) 파이썬 내에서 사용자 정의 Java 클래스를 인스턴스화합니다. 그것 느슨하게 예제를 따릅니다. http://hustleplay.wordpress.com/2010/02/18/jpype. -Tutorial / 및 is. 와 연관되다: JPype 두드리지

여기에 Python 코드가 있습니다 (/users/me/jpypeTest/testjpype.py) :

from jpype import *
cpopt="-Djava.class.path=%s" % ("/Users/me/jpypeTest")
startJVM(getDefaultJVMPath(),"-ea",cpopt)
print "JVM path:",getDefaultJVMPath()
print "classpath:",cpopt
java.lang.System.out.println("Hello World!!")
testPkg = JPackage('pkg')
Test = testPkg.Test
Test.speak("hi")
shutdownJVM()
.

여기에는 Java 코드가 있습니다 (/users/me/jpypeTest/pkg/test.java) :

package pkg;
public class Test {
    private String msg;

    public Test() {
        msg = "nothing so far...";
    }

    public static void speak(String msg) {
        System.out.println(msg);
    }
}
.

컴파일 :

javac Test.java
.

오류없이 /users/me/jpypetest/pkg/test.class를 생성합니다 (나는 또한 작업 디렉토리에 Test.class를 시험해 보았습니다)

파이썬 코드를 실행하면 다음과 같습니다.

> python testjpype.py 
JVM path: /System/Library/Frameworks/JavaVM.framework/JavaVM
classpath: -Djava.class.path=/Users/me/jpypeTest
Hello World!!
Traceback (most recent call last):
  File "testjpype.py", line 9, in <module>
    Test.speak("hi")
  File "/Users/me/dev/lib/python2.7/site-packages/jpype/_jpackage.py", line 53, in __call__
    raise TypeError, "Package "+self.__name+" is not Callable"
TypeError: Package pkg.Test.speak is not Callable
.

시스템은 MAVERICKS를 실행하는 MAC입니다.

> java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

> javac -version
javac 1.7.0_45

> python --version
Python 2.7.5

> python -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)'
('7fffffffffffffff', True)
.

가져온 Java 클래스를 나열하는 JPype 메서드는 매우 유용합니다

이걸 보셔서 많은 감사합니다!

도움이 되었습니까?

해결책

문제는 jpackage 클래스의 속성에 액세스하는 것으로 보이는 것으로 보이는 것으로 보이는 것으로 보이는 것으로 보이는 것으로 보이는 것처럼 보입니다.testjpype.py를이 작업을 수행하도록 변경합니다.

from jpype import *
cpopt="-Djava.class.path=%s" % ("/Users/me/jpypeTest")
startJVM(getDefaultJVMPath(),"-ea",cpopt)
java.lang.System.out.println("Hello World!!")
Test = JClass('pkg.Test')
Test.speak("hi")
shutdownJVM()
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top