Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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 pyjnius“;“未找到类”;导入jar文件时_Java_Python_Pyjnius_Py4j - Fatal编程技术网

Java pyjnius“;“未找到类”;导入jar文件时

Java pyjnius“;“未找到类”;导入jar文件时,java,python,pyjnius,py4j,Java,Python,Pyjnius,Py4j,我正试图让pyjnius使用我从java应用程序构建的jar文件,但我一直遇到“未找到类”错误: 其中有com/myapp/webapp/server/helpers/license/CalculationHelper.class 我也尝试过这样设置类路径: import jnius_config jnius_config.set_classpath('.', '~/workspace/myapp-Tools/Admin/Console/couchdb/') #import jnius from

我正试图让pyjnius使用我从java应用程序构建的jar文件,但我一直遇到“未找到类”错误:

其中有com/myapp/webapp/server/helpers/license/CalculationHelper.class

我也尝试过这样设置类路径:

import jnius_config
jnius_config.set_classpath('.', '~/workspace/myapp-Tools/Admin/Console/couchdb/')
#import jnius
from jnius import autoclass
但这给了我同样的结果。 我在做一个虚拟电视节目。 我已经尝试了所有我能在网上找到的方法,但它根本不起作用。我不得不手动安装pyjnius,因为使用pip使我得到了它的旧版本。 非常感谢您的帮助


编辑:使用非我创建的jar尝试此操作,我看到了另一个错误

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import jnius_config
>>> jnius_config.add_classpath('/home/sam/workspace/someproject/*')
>>> jnius_config.expand_classpath()
'/home/sam/workspace/someproject/annotations.jar:/home/sam/workspace/someproject/junit-4.10.jar:/home/sam/workspace/someproject/    postgresql-8.1-408.jdbc3.jar'
>>> import jnius
>>> from jnius import autoclass
>>> test = autoclass('org/postgresql/geometric/PGcircle.class')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/sam/workspace/myapp-Tools/Admin/Console/couchdb/virtualenv/local/lib/python2.7/site-packages/jnius/reflect.py", line 150,     in autoclass
    c = find_javaclass(clsname)
  File "jnius_export_func.pxi", line 23, in jnius.find_javaclass (jnius/jnius.c:12815)
jnius.JavaException: Class not found 'org/postgresql/geometric/PGcircle/class'
>>> test = autoclass('org/postgresql/geometric/PGcircle')
Exception in thread "main" java.lang.NoClassDefFoundError: org/postgresql/geometric/PGcircle/class
Caused by: java.lang.ClassNotFoundException: org.postgresql.geometric.PGcircle.class
  at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/sam/workspace/myapp-Tools/Admin/Console/couchdb/virtualenv/local/lib/python2.7/site-packages/jnius/reflect.py", line 156,     in autoclass
    for constructor in c.getConstructors():
  File "jnius_export_class.pxi", line 562, in jnius.JavaMethod.__call__ (jnius/jnius.c:19385)
  File "jnius_export_class.pxi", line 649, in jnius.JavaMethod.call_method (jnius/jnius.c:20409)
  File "jnius_utils.pxi", line 43, in jnius.check_exception (jnius/jnius.c:3533)
jnius.JavaException: JVM exception occured
>>> test = autoclass('org/postgresql/geometric/PGcircl')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/sam/workspace/myapp-Tools/Admin/Console/couchdb/virtualenv/local/lib/python2.7/site-packages/jnius/reflect.py", line 150,     in autoclass
    c = find_javaclass(clsname)
  File "jnius_export_func.pxi", line 23, in jnius.find_javaclass (jnius/jnius.c:12815)
jnius.JavaException: Class not found 'org/postgresql/geometric/PGcircl'
>>> 

再次。。。任何帮助都将不胜感激

当我使用jar文件时,它工作得很好。 您是否尝试使用完整路径来定义类路径

  • 视窗7
  • Python 2.7.8
  • jnius 1.1-dev
本页将作为参考有用。

我只是想留下评论,但我没有足够的声誉。 所以我留下一个答案作为评论

调用autoclass时,最好不要使用“/”而不是“.”。 请参阅下面的链接


您是否尝试通过导出添加类路径,然后运行python脚本?这对我有用

$ export CLASSPATH="~/workspace/myapp-Tools/Admin/Console/couchdb/myapp-web.jar"

我通过在Eclipse中将JAR导出为可运行的JAR文件解决了这个问题:

  • 如果没有主方法,请在某个地方创建一个空的主方法(否则导出对我不起作用)
  • 转到文件->导出
  • 选择Java->Runnable JAR文件
  • 单击下一步
  • 在启动配置中选择主方法
  • 选择您的导出目的地
  • 选择“将所需库复制到生成的JAR旁边的子文件夹中”作为库处理(在我的特殊情况下,这是唯一对我有效的选项,但您也可以测试其他选项)
  • 单击“完成”

  • tl;dr:确保.java文件被编译为(最多)与将使用pyjnius导入文件的系统上的java版本相同的java版本.class文件

    较长版本:

    我遇到了一个非常类似的问题,但有一个很大的区别:一些文件工作时没有任何问题,而其他文件(在同一目录中)没有

    导致“找不到类”异常的文件的问题是,我在Windows下编译了这些文件,Windows有Java 8。然而,Ubuntu目前在运行“sudo apt get install default jdk”时安装Java 7


    因此,pyjnius无法在我的Java7Ubuntu安装中导入Java8文件。奇怪的是,它抛出了一个“未找到类”异常,而不是更具描述性的异常。将目标输出更改为1.7修复了我的问题。

    旧帖子,但如果对某人有用,则发布答案

    我发现有两个问题,不确定您是否一起尝试过:

    改变

    jnius_config.set_类路径(“.”,“~/workspace/myapp Tools/Admin/Console/couchdb/”)

    jnius_config.set_类路径(“.”,“~/workspace/myapp Tools/Admin/Console/couchdb/*”)

    test=autoclass('org/postgresql/geometric/PGcircl')

    test=autoclass('org.postgresql.geometric.PGcircl')


    我通过将类路径放入.bashrc解决了这个问题

    CLASSPATH="~/documents/download/programs/tika-app.jar" CLASSPATH=“~/documents/download/programs/tika app.jar”
    它工作正常

    下面的代码向类路径添加一个jar,然后显示类路径以进一步调试

    import os
    import jnius_config
    
    jnius_config.add_classpath("PATH_HERE/SOME.jar")
    
    from jnius import autoclass, cast
    
    ClassLoader = autoclass('java.lang.ClassLoader')
    cl = ClassLoader.getSystemClassLoader()
    ucl = cast('java.net.URLClassLoader', cl)
    urls = ucl.getURLs()
    tmp = [url.getFile() for url in urls]
    print('\n'.join(tmp))
    

    感谢pgkireek,我正在直接使用Ubuntu14.04.1LTS、Python2.7.6和pyjnius。我已经阅读了您发送的两个链接,但对我的情况没有任何帮助。关于调用autoclass时使用“/”而不是“.”,我尝试了这两个链接,但都没有成功=/嗨,Benxy是的,我试过了,运气不好。都是相对路径和绝对路径。但您是否确实尝试从shell设置环境变量?不是来自python脚本。在我的项目中,import os.environ['CLASSPATH']=“/home/code/my_proj/my.jar”不起作用。首先,我在shell中导出CLASSPATH=“/home/code/my_proj/my.jar”,然后运行“python my_script.py”,然后自动类工作。当我从shell设置env变量时,它就像一个符咒。检查这个链接:嗨,本西,再次是的。我在bash中构建了一个包装器脚本来调用python脚本,在调用python脚本之前设置类路径。感谢+1
    奇怪的是,它抛出了一个“未找到类”异常,而不是更具描述性的异常
    ——这指出了一个普遍问题,即jar的任何运行时问题都可能是这个问题的根本原因。对于那些苦苦挣扎的人,请验证您可以在python应用程序试图运行它的环境中独立运行jar。
    $ export CLASSPATH="~/workspace/myapp-Tools/Admin/Console/couchdb/myapp-web.jar"
    
    CLASSPATH="~/documents/download/programs/tika-app.jar"
    import os
    import jnius_config
    
    jnius_config.add_classpath("PATH_HERE/SOME.jar")
    
    from jnius import autoclass, cast
    
    ClassLoader = autoclass('java.lang.ClassLoader')
    cl = ClassLoader.getSystemClassLoader()
    ucl = cast('java.net.URLClassLoader', cl)
    urls = ucl.getURLs()
    tmp = [url.getFile() for url in urls]
    print('\n'.join(tmp))