Простой пример с py4J

я установил py4J использование pip на моем conda виртуальная среда в Python. Я написал супер простой пример AdditionApplication.java проверить py4J, но он не компилируется, т. е.

javac AdditionApplication.java

не жалуюсь, что GatewayServer не определен.

я хорошо разбираюсь в Python, но, к сожалению, не в Java. Что еще мне нужно предоставить?

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

в случае, если это имеет значение, у меня есть следующая версия Java установлено:

java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

обновление 1

после того, как я добавил: import py4j.GatewayServer; в верхней части файла я получил другую ошибку:

package py4j does not exist

обновление 2

pip install py4j осталось под <PATH_TO_CONDA_ENVIRONMENT>/share/py4j/py4j0.8.1.jar. Я добавил его в свой путь класса с помощью:

javac -cp <PATH_TO_CONDA_ENVIRONMENT>/share/py4j/py4j0.8.1.jar AdditionApplication.java

и вывода

AdditionApplication.class

как мне его запустить?

последнее обновление и решение:

после применения предыдущие исправления, я, наконец, запустить код с:

java -cp <PATH_TO_CONDA_ENVIRONMENT>/share/py4j/py4j0.8.1.jar AdditionApplication 

код работает в фоновом режиме. Чтобы проверить это:

>>> 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)
>>> addition_app = gateway.entry_point        # get the AdditionApplication instance
>>> addition_app.addition(number1,number2)    # call the addition method

1 ответов


импорт GatewayServer С py4j пакет, так что неквалифицированный класс может быть использован в приложении

import py4j.GatewayServer;