Класс JPype не найден
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, код запускается БЕЗ ошибок. Например, приведенный ниже код работает:
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:
Проблема решена, см. Ответ ниже...
2 ответа
Я решил проблему, и я хотел бы дать ответ здесь для записей.
1) Ничего не было не так с исходным кодом.
2) Проблема заключалась в том, что мой Python
было 32 бита и мой java sdk
(включая компилятор байт-кода javac) составлял 64 бита. Я удалил java sdk
и переустановил 32-битную версию. Готово! Решено!
Попробуйте изменить свой путь так:
jpype.startJVM(jpype.getDefaultJVMPath(), '-ea', '-Djava.class.path=c:\\tmp\')