Java コードから外部 JavaScript 関数を呼び出す

Muhammad Muzammil Hussain 2023年10月12日
Java コードから外部 JavaScript 関数を呼び出す

この記事では、Java プログラムに JavaScript ソースを組み込む方法と、Java コードから JavaScript 関数を呼び出す方法について説明します。

Java コードから外部 JavaScript 関数を呼び出す

Java で JavaScript ソースを呼び出すのは非常に簡単です。 JavaScript を使用する必要がある Java アプリケーションを開発する場合は、スクリプト ファイルを個別に作成し、それを Java ソースに含めて呼び出して、目的の機能を実行します。

例として、次のシナリオを見てみましょう。

まず、Java コードで呼び出される別の JavaScript ファイルで関数を定義する必要があります。 渡された 2つの値の加算などの算術タスクを実行する JavaScript ソースを作成しました。

例:

var myCalculations = new Object();

myCalculations.addition = function(v1, v2) v1 + v2;

この JavaScript ソースでは、新しいオブジェクト myCalculations を作成しました。 そのオブジェクトには、引数として 2つの値を取り、それらを加算する定義済みの加算関数があります。

これが JavaScript ドキュメントになるため、このソースを拡張子 .js で保存する必要があります。 そのスクリプトをロードしてオブジェクトを取得するには、ScriptEngineManagereval() 関数を使用する必要があります。

ScriptEngineManager は、Java コードにインポートできるデフォルトの Java ライブラリです。 そのライブラリのインスタンスを使用して、スクリプトをロードできます。

以下に示すように、JavaScript ファイルをロードできます。

String javascriptPath = "drive:/folder/fileName.js";
engine.eval("load('" + javascriptPath + "')");
Object myCalculations = engine.get("myCalculations");

以下に示すように、目的の関数を名前で取得し、パラメーターを渡すことができます。

Object addingResult = inv.invokeMethod(myCalculations, "addition", x, y);

ScriptEngineManager を使用して JavaScript ファイルを使用する完全な Java プログラムの例を次に示します。

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class Main {
  public static void main(String[] args) throws Exception {
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");

    Invocable inv = (Invocable) engine;
    String javascriptPath = "drive:/folder/fileName.js";
    engine.eval("load('" + javascriptPath + "')");
    Object myCalculations = engine.get("myCalculations");

    int x = 10;
    int y = 5;
    Object addingResult = inv.invokeMethod(myCalculations, "addition", x, y);

    System.out.println("Your addition result will be: " + addingResult);
  }
}

出力:

Your addition result will be: 15

コードの説明:

  1. 上記の Java コードでは、スクリプトをロードするために、最初に便利なライブラリ ScriptEngineManager をインポートしました。
  2. メイン関数では、ScriptEngineManager のインスタンスを作成し、JavaScript の名前でスクリプト エンジンを定義しました。
  3. これで、JavaScript ファイルのパスが割り当てられる文字列変数が宣言されました。
  4. 次に、そのパスを engine.eval() メソッドでロードします。
  5. これで、JavaScript ファイルのオブジェクト myCalculations を呼び出し、それを使用してそのオブジェクトの関数を呼び出しました。
  6. 最後に、関数に 2つの整数型の値を渡し、Java のデフォルト関数 System.out.println("anything you want to print") を使用してターミナルに結果を表示しました。