13

Python の仮想環境にpy4Jpip を使用してインストールしました。をテストするcondaための非常に単純な例を書きましたが、コンパイルに失敗します。AdditionApplication.javapy4J

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 py4jjarの下にファイルを残しました<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
4

1 に答える 1

6

非修飾クラスをアプリケーションで使用できるようにGatewayServer、パッケージからインポートします。py4j

import py4j.GatewayServer;
于 2014-03-13T17:33:51.577 に答える