jvm 未找到JPype类

vbopmzt1  于 8个月前  发布在  其他
关注(0)|答案(3)|浏览(92)

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:

问题已解决,请看下面的答案。

fhity93d

fhity93d1#

我解决了这个问题,我会让答案在这里记录。
1)源代码没有问题
2)问题是我的Python是32位的,而java sdk(包括javac字节码编译器)是64位的。我重新安装了java sdk并重新安装了32位版本。搞定了

zpjtge22

zpjtge222#

试着像这样改变你的路径:

jpype.startJVM(jpype.getDefaultJVMPath(), '-ea', '-Djava.class.path=c:\\tmp\')
dvtswwa3

dvtswwa33#

尝试使用您的路径与一个\,而不是两个\,以及Windows平台的根与大写的C,如下所示:

jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=C:\tmp\A.jar")

在我的情况下,它起作用了。

重要提示:

  • 我有JDK 11和Python 3.9.6,都是64位的。
  • 您可以创建一个jar文件来打包类A。
  • 您可以通过在命令行中执行以下命令来检查已安装的Python位数:
python -c "import sys; print(sys.maxsize > 2**32)"

相关问题