0

私の Jython スクリプトは、私が Java で書いているコードを呼び出しています (私は Java マルチスレッドに慣れているため)。ここで、Java から Jython メソッドの 1 つを呼び出す必要があることがわかりました (そうしないと、Java で書き直す必要があります)。

Jython から Java を駆動するのは簡単で、Java がマスターで Jython がスレーブになるように設定するのも簡単ですが、相互に呼び出すことができるように設定する最善の方法は明らかではありません。

公式ドキュメントには、これらすべてに関する非常に長い記事が含まれています:第 10 章: Jython と Java の統合、一見したところ、このタスクは難しいように見えます: 1 対 1 のオブジェクト ファクトリ、疎結合のファクトリ、および作成する多くのコードそれは動作します。

私が見つけた他の情報源もありますが、それらも多くの詳細を説明していますが、どちらも単純な解決策を提供していません:

Jython インタープリターが既に実行されているため、新しいインタープリターをインスタンス化する必要なく、その中でメソッドを呼び出す簡単な方法があるはずです (上記の最後のリンクのように、Java が Jython を駆動している場合に行う必要があるように)。 . 実際にそのような方法はありますか?

4

1 に答える 1

0

この記事では簡単な解決策を提案し、次の例はうまくいきました。ジャワ:

import org.python.core.PyObject;

public class JythonFromJava {
    public void callPO(PyObject po) {
        po.__call__();
    }
}

以下でコンパイル:

$ javac -classpath ".;C:\Programs\jython2_7b1\jython.jar" JythonFromJava.java

ジソン:

import JythonFromJava

def method():
    print "METHOD called"

j = JythonFromJava()
j.callPO(method)

それを実行する:

$ jython jython_from_java_j.py 
METHOD called

というわけで、必要なものはこれだけのようです。Jython メソッドへのハンドルを一種のコールバックとして Java に送信する必要がありますが、この場合は非同期リクエスト用のツールではなく、言語間リクエスト用のツールです。


編集:マルチスレッドがどこにあるのかわかりません。Javaコード内で作成および開始された別のスレッドからJythonメソッドを呼び出すので、Jythonインタープリターがそれ自体への同期アクセスを保証することを願っています...

于 2014-04-19T05:15:06.973 に答える