V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
hughV2
V2EX  ›  Python

Jpype 使用, class not found.

  •  
  •   hughV2 · 2015-08-25 18:15:26 +08:00 · 7431 次点击
    这是一个创建于 3379 天前的主题,其中的信息可能已经有所发展或是发生改变。
    尝试了很多次,博文里大多说的 是 classpath 的设置问题。但这个应该不会有问题的。

    Hello.java
    ——————————————————————————————————————
    public class Hello {
    public void sayHello (){
    System.out.println ("hello world.");
    }
    public String getStr (String str ){
    System.out.println ("let's go .");
    return str;
    }
    public static void main (String[] args ) {
    System.out.println ("say hello.");
    }
    }

    .py
    ______________________________________________________________
    #!/usr/bin/python
    #-*-coding:utf-8-*-
    import jpype
    externalClassPath = '/data/flowgw/lib/' #class 文件所在的目录
    jpype.startJVM (jpype.getDefaultJVMPath (), "-DJava.class.path = " + externalClassPath )
    jclass = jpype.JClass ('Hello')
    obj = jclass () # new 一个 Demo 对象
    obj.sayHello () #打印 hello world
    jpype.shutdownJVM ()

    [ ERROR ]
    ————————————————————————————————————
    [resin_ana@fg-test lib]$ python pype_test1.py
    Traceback (most recent call last ):
    File "pype_test1.py", line 8, in <module>
    jclass = jpype.JClass ('Hello')
    File "/usr/local/lib/python2.7/site-packages/jpype/_jclass.py", line 55, in JClass
    raise _RUNTIMEEXCEPTION.PYEXC ("Class %s not found" % name )
    jpype._jexception.RuntimeExceptionPyRaisable: java.lang.RuntimeException: Class Hello not found



    PS:在 redhat 中,使用 pip install jpype1 安装的,版本 jpype 0.6.1
    其中,官方文档中说明了,混合了 32 位和 64 位 python 、 jdk 的是不行的,
    我的 python 是 64 位的,而 java -version 显示
    OpenJDK Runtime Environment (IcedTea6 1.10.4 ) (rhel-1.41.1.10.4.el6-x86_64 )
    OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode )

    不知道是不是这个原因。
    好几天了都没搞好,泪奔~~
    6 条回复    2015-09-10 15:26:53 +08:00
    xunyu
        1
    xunyu  
       2015-08-25 22:05:17 +08:00
    我在 windows 上可以直接调用.java , linux 上没成功,编译成 jar 再调用的
    jerrypy
        2
    jerrypy  
       2015-08-27 17:29:23 +08:00
    .java 编译了吗?
    hughV2
        3
    hughV2  
    OP
       2015-08-28 15:12:06 +08:00
    @jerrypy 在 windows 下 javac 编译
    hughV2
        4
    hughV2  
    OP
       2015-08-28 15:13:46 +08:00
    @xunyu 可以调用 lang.java.system.println () 输出 hello ,但是我按照别人的 bolg 调用 class 都没成功。同样的报错。。。
    xunyu
        5
    xunyu  
       2015-09-08 11:38:16 +08:00
    @hughV2 jpype 的坑在于如果内存不够也是会报这个错误,
    hughV2
        6
    hughV2  
    OP
       2015-09-10 15:26:53 +08:00
    @xunyu 吐槽一下,好像就不会报别的错了~~
    不过,之前的问题解决了,是我 rz 上传 jar 包用了 ascll 方式上传。。坑!
    而且, class 的引用指定到目录, jar 包的引用指定到 jar 包。
    [对于多个 jar 包] 我尝试过都写入路径,没成功,最后还是打包成一个 jar 包搞定的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1084 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:28 · PVG 07:28 · LAX 15:28 · JFK 18:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.