3

我已经阅读并搜索了所有堆栈溢出..我还发现找不到JPype 类,但它并没有帮助我,虽然它已经解决了!我也有同样的问题 !我正在使用 Mac,python 2.7.6

我的 python 代码和 A.java 都在桌面上。但我不断收到此错误:

回溯(最后一次调用):文件“/Users/jeren/Desktop/aa.py”,第 13 行,在 A = jpype.JClass("A") 文件“/Library/Frameworks/Python.framework/Versions/2.7 /lib/python2.7/site-packages/jpype/_jclass.py",第 54 行,在 JClass 中引发 _RUNTIMEEXCEPTION.PYEXC("Class %s not found" % name) java.lang.ExceptionPyRaisable: java.lang.Exception:未找到 A 类

aa.py : 导入 jpype

import os

jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=/Users/jeren/Desktop/")

A = jpype.JClass("A")

a = A()

jpype.shutdownJVM()

一个.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位的!问题可能出在哪里?

4

2 回答 2

1

一切都很好,只需要在 A 类的开头添加一个“公共”:

    public class A
    {       
        public A()       
        {
            super();
        }
        public String sayHi()

        {
            return("Hello");
        }
于 2014-05-12T12:03:49.037 回答
0

这里有一些关于为 jpype 指定类路径的更多节点。

A.检查JDK路径

我安装了几个版本的 Java JDK,但 getDefaultJVMPath 没有产生预期的路径。我需要更换

jpype.getDefaultJVMPath()

带有 JDK 的路径,该路径实际上已用于编译代码,例如

D:/jdk11/bin/server/jvm.dll

B. 相对路径 可以使用相对路径。例如,如果我的 python 文件位于包文件夹“pkg”中,而我的 java 类文件位于“bin”文件夹的子文件夹“foo”中:

父文件夹

  • 包/main.py
  • bin/foo/Foo.class

    jpype.startJVM(jvmPath, '-Djava.class.path=../bin") 链接 = jpype.JClass('foo.Foo')

对于此示例,java 应用程序的工作目录将是 pkg 文件夹。换句话说,在 Foo 类的 main 方法中,您可能希望使用“../”来访问 parentFolder。

C. -cp 选项不起作用 我尝试使用 -cp 选项而不是 -Djava.class.path,我会发现它更直观。但是,以下代码不起作用:

jpype.startJVM(jvmPath, '-cp', classPath)

D. 罐子需要单独包含

我试图包含一个包含多个 jar 文件的文件夹。

父文件夹

  • foo/main.py
  • 库/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) 的解决方案:导入 jar 的文件夹

于 2019-03-29T11:55:32.577 回答