java - 未找到 JPype 类

标签 java python jvm jpype

JPype 是一个了不起的项目,因为我允许直接从 Python 实例化 JVM

不幸的是,我在最初的婴儿步骤中陷入了困境。

我有A.java源代码(位于C:\tmp文件夹):

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:

问题仍然存在。但是,只是为了补充我的问题,如果我使用 native 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:

问题已解决,请参阅下面的答案...

最佳答案

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

1) 源代码没有任何问题。

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

关于java - 未找到 JPype 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23430466/

相关文章:

java - 如何处理 Play Framework 中的 session 超时或过期?

java - a4j :support function getting called only once in h:commandLink

python - 工作流程按钮 Odoo v8

java - Java 字节码在同一版本的 Java 的不同更新中是否兼容?

java - 使用runtime.exec()调用java方法

java - 通过定时器设置 JDialog 不透明度

java - 为什么在 Iterable 和 Collection 接口(interface)中都存在迭代器方法?

python - netcat 的 -q 选项到底有什么作用?

python - 有没有办法等待从当前脚本(使用 subprocess.Propen())调用的另一个 python 脚本直到它完成?

eclipse - 从较低的 JRE 访问时,访问库(使用较高的 jdk 编译)会出现异常