2

Java のスクリプティング サポートを調べています。現在、このテスト クラスを持っています。

import java.io.FileNotFoundException;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;



/**
 *
 * @author Makerimages
*/
public class main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws ScriptException, FileNotFoundException, NoSuchMethodException {

    // create a script engine manager
    ScriptEngineManager factory = new ScriptEngineManager();
    // create JavaScript engine
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    // evaluate JavaScript code from given file - specified by first argument
    engine.eval(new java.io.FileReader("C:/Users/**/Documents/NetBeansProjects/test/src/l.js"));

}
public void makeObject(String s)
{
    System.out.println(s);
}

}

そしてこのl.jsファイル

makeObject("afzsdf");

これを実行しようとすると、

run: スレッド "main" での例外 javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "makeObject" が定義されていません。(#1) com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:224) の行番号 1 の javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:249) の main.main(main. java:34) 原因: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "makeObject" が定義されていません。(#1) sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3771) で sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3749) で sun.org で.mozilla.javascript.internal.ScriptRuntime.notFoundError(ScriptRuntime.java:3834) (sun.org.mozilla.javascript)。

スクリプトで makeObject 関数を使用できるようにするにはどうすれば修正できますか?

4

1 に答える 1

0

Java オブジェクトを JS スコープにリンクするなど、バインディングを追加する必要があります。

ジャワ:

import javax.script.*;
import java.io.FileNotFoundException;

public class main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws ScriptException, FileNotFoundException, NoSuchMethodException {

        // create a script engine manager
        ScriptEngineManager factory = new ScriptEngineManager();
        // create JavaScript engine
        ScriptEngine engine = factory.getEngineByName("JavaScript");

        //bind main instance
        Bindings bindings = engine.createBindings();
        bindings.put("main", new main());
        engine.setBindings(bindings, ScriptContext.GLOBAL_SCOPE);

        // evaluate JavaScript code from given file - specified by first argument
        engine.eval(new java.io.FileReader("l.js"));

    }

    public void makeObject(String s) {
        System.out.println(s);
    }
}

JS では、このmainオブジェクトを参照します。

main.makeObject("afzsdf");
于 2013-10-27T21:18:43.083 に答える