JPype是一个很棒的项目,因为我允许直接从Python实例化JVM。
不幸的是,我被困在了婴儿的第一步。
我有(located in C:\tmp folder):的A.java源代码
class A {
public A() {
super();
}
public String sayHi() {
return("Hello");
}
}它被编译为一个类,使用:javac A.java
因此,A.class位于A.class文件夹中。
我有以下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库(如: 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:
问题解决了,见下面的答案..。
发布于 2014-05-02 20:15:05
我解决了这个问题,我会在这里给出答案作为记录。
1) 源代码没有任何问题。
2)问题是我的Python是32位,我的java sdk (包括javac字节码编译器)是64位。我卸载了java sdk并重新安装了32位版本。完成了!解决了!
发布于 2016-04-26 07:07:40
试着像这样改变你的道路:
jpype.startJVM(jpype.getDefaultJVMPath(), '-ea', '-Djava.class.path=c:\\tmp\')https://stackoverflow.com/questions/23430466
复制相似问题