我已经阅读并搜索了所有堆栈溢出..我也找到了JPype class not found但它没有帮助我,虽然它已经解决了!我也有同样的问题 !我正在使用Mac,python 2.7.6
我的python代码和A.java都在桌面上。但我一直收到这个错误:
Traceback(最近一次调用最后一次):文件 “/Users/jeren/Desktop/aa.py”,第13行,in A = jpype.JClass(“A”)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/jpype/_jclass.py”, 第54行,在JClass中 raise _RUNTIMEEXCEPTION.PYEXC(“找不到类%s”%name)java.lang.ExceptionPyRaisable:java.lang.Exception:找不到类A
aa.py: import jpype
import os
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=/Users/jeren/Desktop/")
A = jpype.JClass("A")
a = A()
jpype.shutdownJVM()
A.java:
class A
{
public A()
{
super();
}
public String sayHi()
{
return("Hello");
}
public static void main(String[] argv)
{
System.out.println ("Hello ");
}
public static int add(int a, int b)
{
return(a+b);
}
}
我的mac,java和python都是64位!问题出在哪里?
答案 0 :(得分:1)
一切都很好,只需添加公众'到A级开头:
public class A
{
public A()
{
super();
}
public String sayHi()
{
return("Hello");
}
答案 1 :(得分:0)
在为jpype指定类路径时,还有一些其他节点。
A。检查JDK路径
我安装了多个Java JDK版本,并且getDefaultJVMPath没有产生预期的路径。我需要更换
jpype.getDefaultJVMPath()
具有JDK的路径,该路径实际上已用于编译代码,例如
D:/jdk11/bin/server/jvm.dll
B。相对路径 可以使用相对路径。例如,如果我的python文件位于程序包文件夹“ pkg”中,而我的java类文件位于“ bin”文件夹的子文件夹“ foo”中:
parentFolder
bin / foo / Foo.class
jpype.startJVM(jvmPath,'-Djava.class.path = .. / bin“) 链接= jpype.JClass('foo.Foo')
在此示例中,java应用程序的工作目录将是pkg文件夹。换句话说,在Foo类的主要方法中,您可能想要使用“ ../”来访问parentFolder。
C。 -cp选项不起作用 我尝试使用-cp选项而不是-Djava.class.path,它会更具启发性。但是,以下代码不起作用:
jpype.startJVM(jvmPath, '-cp', classPath)
D。罐子需要单独包装
我试图包含一个包含几个jar文件的文件夹。
parentFolder
以下代码不起作用:
jpype.startJVM(jvmPath, '-Djava.class.path=../lib/*")
link = jpype.JClass('foo.Foo')
每个jar文件都需要单独包含,例如:
libOath = '../lib'
libJarPaths = str.join(';', [libPath + '/' + name for name in os.listdir(libPath)])
jpype.startJVM(jvmPath, '-Djava.class.path=../lib/*")
link = jpype.JClass('foo.Foo')