10

これが私の状況です:

JavaクラスのRhinoContextオブジェクトにアクセスできます。たくさんの.jsファイルを読み込んで、それらをRhinoコンテキストに渡して、評価してもらいたいと思います。.jsファイルで宣言されている変数を利用できるようにするだけで、スクリプトコンテキストで.jsファイルの関数を利用できるようにすることにはあまり興味がありません(これはツール検証の一種の問題です)。

理想的には、1行ずつではなく、各ファイルを一度に読み込んで評価しようとします。Context( Rhino APIを参照)にと呼ばれるメソッドがあることに気づきましたevaluateReader()。私の最初の推測は、ロードしたいすべてのファイルを取得し、それらすべてを調べて、このメソッドを呼び出して、それぞれにある種のリーダーオブジェクトを渡す必要があるということです。これで、すべてがスクリプトコンテキストに含まれるようになりました。

ですから、私が正しい方向に進んでいると仮定して、Javaスクリプトコンテキストで.jsファイルを使用するために従うべき良い習慣があるかどうか、それを行うためのより良い方法があるかどうか、またはあなたがそれを行ったかどうかを誰かに教えてもらえますか?他の方法など?

ここで実装の詳細を探すのではなく、コードの一部ですでにこれを行っている可能性のある他の人々からのフィードバックだけです。Javaのスクリプト言語をいじるのは、私にとって初めてのことです。

4

1 に答える 1

13

RhinoがJava6で出荷されていることをご存知ですか?

String javaScriptExpression = "sayHello(name);";
Reader javaScriptFile = new StringReader(
    "function sayHello(name) {\n"
        + "    println('Hello, '+name+'!');\n" + "}");

ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory
    .getEngineByName("JavaScript");
ScriptContext context = engine.getContext();
context.setAttribute("name", "JavaScript",
    ScriptContext.ENGINE_SCOPE);

engine.eval(javaScriptFile);
engine.eval(javaScriptExpression);

Java 5で使用する場合は、APIを別途ダウンロードする必要があります。scripting.dev.java.netから、多くの一般的なスクリプト言語用のエンジンを入手できます。

于 2009-05-19T07:26:42.147 に答える