7

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?

1
  • Don't you need a hostname and/or a port to connect to the REMOTE JVM? Commented Dec 24, 2013 at 2:54

3 Answers 3

7

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!

Sign up to request clarification or add additional context in comments.

2 Comments

I think you mean a ; not a : in your class path.
Depends on the platform you are using. : on UNIX or ; on Windows. A little bit more information on the topic can be found 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();
      }
}

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

Comments

-1

You should first start the java program, and then invoke java method from python.

py4j doesn't start jvm, it just connects to the already started java process.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.