Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java代码中调用javascript方法_Java_Javascript - Fatal编程技术网

如何在Java代码中调用javascript方法

如何在Java代码中调用javascript方法,java,javascript,Java,Javascript,我试图在java代码中调用一个javascript方法,但是我遇到了很多错误,所以我将该方法放在main中进行检查,这样我就可以在控制台“sun.org.mozilla.javascript.internal.解释器函数”中得到它 我看不出有什么方法可以调用它。 谢谢 alert()方法不是核心Javascript语言的一部分。它仅在脚本在web浏览器中运行时出现。因此,它在JavascriptScriptEngine实例中不可用。(不,在Java小程序中使用ScriptEngine并不重要。这

我试图在java代码中调用一个javascript方法,但是我遇到了很多错误,所以我将该方法放在main中进行检查,这样我就可以在控制台“sun.org.mozilla.javascript.internal.解释器函数”中得到它 我看不出有什么方法可以调用它。 谢谢

alert()
方法不是核心Javascript语言的一部分。它仅在脚本在web浏览器中运行时出现。因此,它在Javascript
ScriptEngine
实例中不可用。(不,在Java小程序中使用
ScriptEngine
并不重要。这会让人很困惑,我不推荐这样做。)


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

消息实际上是它告诉您它进行了计算(如果您调用了您定义的函数,它会抱怨)。以下是打印输出的示例:

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));
}

这会返回相同的结果

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

  String myJSCode = "function calcul()"
        + "{"
        + "println('hello world');"
        + "return true;"
        + "}" +
        "calcul();";

我试过这个,它成功了:

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代码中调用的方法中 这样,消息框将在屏幕上显示给用户


非常感谢你的帮助

如果没有GUI,
alert
如何工作?我是初学者,需要您的帮助。JavaScript中的
print()
将输出,
System.out.println()
不需要仍然有相同的错误“sun.org.mozilla.JavaScript.internal”。InterpretedFunction@1aed7c1“
解释器功能
不是错误(虽然它看起来确实像一个)。返回类型是经过计算的JavaScript,它被解释为一个函数。您可以通过以下更复杂的示例来调用此函数:仍然有此“sun.org.mozilla.JavaScript.internal.expressedfunction”仍然有相同的问题,即使我通过打印更改警报sun.org.mozilla.javascript.internal。InterpretedFunction@12e9d91"
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" );  


    } `