JPype是一个令人惊叹的项目,因为我允许直接从Python
示例化JVM
。
不幸的是,我在婴儿的第一步就被卡住了。
我有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,代码运行时没有错误。例如,下面的代码工作:
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:
问题已解决,请看下面的答案。
3条答案
按热度按时间fhity93d1#
我解决了这个问题,我会让答案在这里记录。
1)源代码没有问题
2)问题是我的
Python
是32位的,而java sdk
(包括javac字节码编译器)是64位的。我重新安装了java sdk
并重新安装了32位版本。搞定了zpjtge222#
试着像这样改变你的路径:
dvtswwa33#
尝试使用您的路径与一个
\
,而不是两个\
,以及Windows平台的根与大写的C
,如下所示:在我的情况下,它起作用了。
重要提示: