【问题标题】:How to call java from python using PY4J如何使用 PY4J 从 python 调用 java
【发布时间】:2014-01-12 07:07:46
【问题描述】:

我想用 Py4J 库从 python 调用 java,

from py4j.java_gateway import JavaGateway
gateway = JavaGateway()                        # connect to the JVM
gateway.jvm.java.lang.System.out.println('Hello World!')

我收到以下错误:“Py4JNetworkError:尝试连接到 Java 服务器时出错”。好像没有JVM在运行,如何解决?

【问题讨论】:

  • 您不需要主机名和/或端口来连接到 REMOTE JVM 吗?

标签: java python py4j


【解决方案1】:

最小的工作示例:

//AdditionApplication.java
import py4j.GatewayServer;

public class AdditionApplication {

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

编译(确保py4j的-cp路径有效,否则调整到正确位置):

javac -cp /usr/local/share/py4j/py4j0.9.jar AdditionApplication.java

运行它:

java -cp .:/usr/local/share/py4j/py4j0.9.jar AdditionApplication

现在,如果您运行 python 脚本,在运行 java AdditionApplication 的终端中,您应该会看到如下内容:

>>> Hello World!

【讨论】:

  • 我认为你的意思是你的类路径中的 ; 不是 :
  • 取决于您使用的平台。 : 在 UNIX 上或 ; 在 Windows 上。有关该主题的更多信息可以找到here
【解决方案2】:
package test.test;

import py4j.GatewayServer;

public class AdditionApplication {
    public int addition(int first, int second) {
        return first + second;
      }

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

新建一个类并运行它(首先在'py4j-0.8\py4j-0.8\py4j-java'处导入py4j0.8.jar),然后运行python程序

【讨论】:

    【解决方案3】:

    你应该先启动java程序,然后从python调用java方法。

    py4j 不启动 jvm,它只是连接到已经启动的 java 进程。

    【讨论】:

      猜你喜欢
      • 2014-06-03
      • 2017-03-17
      • 2017-08-07
      • 2014-11-11
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      相关资源
      最近更新 更多