py4j——解决用python访问java遇到的问题

现实中经常是 python 和java 两中语言 相互调用 ,之前一直使用 shell 去执行 java jar 命令,现在需要用到java 的 一些类,在尝试使用py4j ,

简单来说就是先装上py4j的包,然后在Python环境中去执行官网py4j的demo程序,但是遇到了一些问题。

py4j.protocol.Py4JNetworkError: An error occurred while trying to connect to the Java server (127.0.0.1:25333)
An error occurred while trying to connect to the Java server (127.0.0.1:25333)


后来找了stackoverflow上的一个答案py4j.protocol.Py4JNetworkError : An error occurred while trying to connect to the Java server知道了该怎么解决,需要单独开启JavaGateway,这里运用java的一个程序去开启。

import py4j.GatewayServer;

public class myTest {

    public static void main(String[] args) {
        myTest app = new myTest();
        // app is now the gateway.entry_point
        GatewayServer server = new GatewayServer(app);
        server.start();
    }
}

但是又遇到了一个问题,
myTest.java:1: error: package py4j does not exist
是因为py4j的jar包没有引入,于是在集群的目录下找到了这个包,不过某个博客说对于linux系统,作为系统级的库,就会在/usr/share/py4j/py4j0.x.jar;而对于windows么就在C:\python27\share\py4j\py4j0.x.jar,这个得看个人情况去找了。
于是我就将java程序与这个jar包放到一个目录下执行

javac -classpath ./py4j0.9.jar myTest.java

生成.class文件后
java -classpath .:./py4j0.9.jar myTest
便启动了JavaGateway
最后在Python的环境下执行

>>> from py4j.java_gateway import JavaGateway
>>> gateway = JavaGateway()                   # connect to the JVM
>>> random = gateway.jvm.java.util.Random()   # create a java.util.Random instance
>>> number1 = random.nextInt(10)              # call the Random.nextInt method
>>> number2 = random.nextInt(10)
>>> print(number1,number2)
(2, 7)

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 106,549评论 12 127
  • 牛牛发烧了,真难受! 他的头好像变成了两个那么大,迷迷糊糊的,还很疼,他觉得自己就像一个大头鬼一样。 牛牛的脖子也...
    傻狍子616阅读 77评论 1 0
  • 学习资料 cedar Kiwi 使用进阶 Mock, Stub, 参数捕获和异步测试 行为驱动开发 置换测试: M...
    刘大帅阅读 299评论 0 2
  • 零、废话 挖掘数据无论是对运营还是产品,都是一项相当重要的技能,尤其是在大数据时代,有效数据越多,决策的正确率越高...
    低调的喃喃阅读 635评论 0 2
  • 高考填志愿的时候本来最想读的是机械自动化,阴差阳错被调剂到旅游管理。从理科到文科,感觉被强奸了,我真是日了狗了了。...
    小龙游四海阅读 92评论 0 0