Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to call java from python using PY4J

Tags:

java

python

py4j

I want to call java from python with Py4J library,

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

I've got the following error: "Py4JNetworkError: An error occurred while trying to connect to the Java server". It's seems that no JVM is running, how to fix that?

like image 963
hmitcs Avatar asked Mar 21 '23 05:03

hmitcs


2 Answers

Minimal working example:

//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();
  }
}

Compile (make sure that the -cp path to the py4j is valid, otherwise adjust it such that it points to the right place):

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

Run it:

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

Now, if you run your python script, in the terminal where the java AdditionApplication is running you should see something like:

>>> Hello World!

like image 169
Andrej Debenjak Avatar answered Apr 01 '23 11:04

Andrej Debenjak


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();
      }
}

create a new class and run it(import py4j0.8.jar at 'py4j-0.8\py4j-0.8\py4j-java' first),then run python program

like image 43
hong Avatar answered Apr 01 '23 11:04

hong