Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Jpype上找不到类错误_Java_Python_Macos_Python 2.7_Jpype - Fatal编程技术网

Java 在Jpype上找不到类错误

Java 在Jpype上找不到类错误,java,python,macos,python-2.7,jpype,Java,Python,Macos,Python 2.7,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 pac

我已经阅读并搜索了所有堆栈溢出。。我也发现了,但它没有帮助我,虽然它解决了!我也有同样的问题!我正在使用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中 raise\u RUNTIMEEXCEPTION.PYEXC(“未找到类%s”%name)java.lang.ExceptionPraisable: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()
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位的!问题出在哪里

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

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

        {
            return("Hello");
        }

下面是关于为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

    Jtype.startJVM(jvmPath,'-Djava.class.path=../bin”) link=jpype.JClass('foo.foo')

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

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

jpype.startJVM(jvmPath, '-cp', classPath)
jpype.startJVM(jvmPath, '-Djava.class.path=../lib/*")
link = jpype.JClass('foo.Foo')
D.罐子需要单独放入

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

父文件夹

  • foo/main.py
  • lib/foo.jar
以下代码不起作用:

jpype.startJVM(jvmPath, '-cp', classPath)
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')
(解决方案来自)