【问题标题】:Class not found error on Jpype在 Jpype 上找不到类错误
【发布时间】:2014-06-24 15:15:00
【问题描述】:

我已经阅读并搜索了所有堆栈溢出..我还找到了JPype class not found,但它并没有帮助我,尽管它已经解决了!我也有同样的问题 !我正在使用 Mac,python 2.7.6

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

Traceback(最近一次调用最后一次):文件 “/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 中 raise _RUNTIMEEXCEPTION.PYEXC("Class %s not found" % name) java.lang.ExceptionPyRaisable: java.lang.Exception: Class A not found

aa.py: 导入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 位的!问题可能出在哪里?

【问题讨论】:

    标签: java python macos python-2.7 jpype


    【解决方案1】:

    一切正常,只需要在 A 类的开头添加一个“public”:

        public class A
        {       
            public A()       
            {
                super();
            }
            public String sayHi()
    
            {
                return("Hello");
            }
    

    【讨论】:

      【解决方案2】:

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

      A.检查JDK路径

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

      jpype.getDefaultJVMPath()
      

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

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

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

      父文件夹

      • pkg/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 需要单独包含

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

      父文件夹

      • 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的解决方案)

      【讨论】:

        猜你喜欢
        • 2014-06-19
        • 2011-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-03
        • 2018-06-24
        • 2014-09-21
        • 1970-01-01
        相关资源
        最近更新 更多