-1

我正在尝试在 java 代码中调用 javascript 方法,但出现很多错误,因此我将该方法放在 main 中进行检查,以便在控制台“sun.org.mozilla.javascript.internal.InterpretedFunction”中得到它而且我看不到调用它的方法。谢谢

public static void main(String[] argv) throws Exception
  {
    ScriptEngineManager manager = new ScriptEngineManager();

    ScriptEngine engine = manager.getEngineByName("js");
    String myJSCode = "function calcul()"
            + "{"
            + "alert('Veuillez verifier le nom et le prenom saisis ');"
            + "}";
    System.out.println(engine.eval(myJSCode));

  }
4

4 回答 4

1

我试过了,它奏效了:

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


        // JavaScript code in a String  
        String script = "function Msg() {print('Veuillez verifier le nom et le prenom saisis !!! '); }";  
        // evaluate script  
        engine.eval(script);  

        // javax.script.Invocable is an optional interface.  
        // Check whether your script engine implements or not!  
        // Note that the JavaScript engine implements Invocable interface.  
        Invocable inv = (Invocable) engine;  

        // invoke the global function named "hello"  
        inv.invokeFunction("Msg" );  


    } `

现在我想做一些改变:

1)将打印更改为消息框

2)将整个代码放入将在html代码中调用的方法中,这样消息框将在屏幕上显示给用户

非常感谢你的帮助 。

于 2013-05-07T19:44:23.900 回答
1

alert()方法不是核心 Javascript 语言的一部分。它仅在脚本在 Web 浏览器中运行时出现。因此,它在 JavascriptScriptEngine实例中不可用。(不,ScriptEngine在 Java 小程序中使用不算数。这真的很混乱,我根本不推荐它。)

如果您想测试向控制台显示某些内容,请尝试调用print()。我相信这个函数是 Rhino 运行时的一部分。

于 2013-05-06T23:23:44.553 回答
0

该消息实际上是它告诉您它已评估(如果您调用了您定义的函数,它会抱怨)。这是一个打印输出的示例:

public static void main(String[] argv) throws Exception
{
  ScriptEngineManager manager = new ScriptEngineManager();

  ScriptEngine engine = manager.getEngineByName("JavaScript");
  String myJSCode = "function calcul()"
                  + "{"
                  +   "print ('Veuillez verifier le nom et le prenom saisis ');"
                  + "}"
                  + "\n"
                  + "calcul();";
  engine.eval(myJSCode);
}

这输出:

Veuillez verifier le nom et le prenom saisis

或者,如果您只是调用一个函数来返回它的输出,您可以使用这样的自执行匿名函数:

public static void main(String[] argv) throws Exception
{
  ScriptEngineManager manager = new ScriptEngineManager();

  ScriptEngine engine = manager.getEngineByName("JavaScript");
  String myJSCode = "(function()"
                  + "{"
                  +   "return 'Veuillez verifier le nom et le prenom saisis';"
                  + "})()";
  System.out.println(engine.eval(myJSCode));
}

这返回相同的东西

于 2013-05-06T23:26:16.810 回答
0

您的代码的另一个问题是它只是定义了一个调用的函数,calcul但没有调用它。根据@duskwuff 所说的并删除警报,您可以定义和调用该函数,如下所示:

  String myJSCode = "function calcul()"
        + "{"
        + "println('hello world');"
        + "return true;"
        + "}" +
        "calcul();";
于 2013-05-06T23:28:39.417 回答