Jpype上的类未找到错误

时间:2014-05-07 14:55:36

标签: java python macos python-2.7 jpype

我已经阅读并搜索了所有堆栈溢出..我也找到了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位!问题出在哪里?

2 个答案:

答案 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

  • pkg / main.py
  • 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

  • foo / main.py
  • lib / foo.jar

以下代码不起作用:

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')

(来自JPype (Python): importing folder of jar's的解决方案)