找不到JPype类

问题描述 投票:0回答:2

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库,如:java.util,代码运行WITHOUT错误。例如,下面的代码有效:

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:

问题解决了,见下面的答案......

java python jvm jpype
2个回答
5
投票

我解决了这个问题,我会在这里给出记录的答案。

1)源代码没有错。

2)问题是我的Python是32位而我的java sdk(包括javac字节码编译器)是64位。我卸载了java sdk并重新安装了32位版本。完成!解决了!


0
投票

尝试改变你的路径:

    jpype.startJVM(jpype.getDefaultJVMPath(), '-ea', '-Djava.class.path=c:\\tmp\')
© www.soinside.com 2019 - 2024. All rights reserved.