2013-05-06 2 views
-1

Я пытаюсь вызвать javascript-метод в Java-коде, но я получаю много ошибок, поэтому я помещаю метод в main, чтобы проверить его, поэтому я получаю это в консоли «sun» .org.mozilla.javascript.internal.InterpretedFunction " , и я не вижу способа вызвать его. благодаряКак вызвать метод javascript в javacode

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

    } 
+5

Как бы «предупреждение» работало без графического интерфейса? –

+0

Я новичок, и мне нужна ваша помощь, пожалуйста, –

ответ

1

alert() метод не является частью основного Javascript языка. Он присутствует только при запуске скрипта в веб-браузере. Таким образом, он недоступен в экземпляре Javascript ScriptEngine. (И нет, использование ScriptEngine в апплете Java не учитывается. Это просто запутывает, и я бы не рекомендовал его вообще.)

Если вы хотите проверить отображение чего-либо на консоли, попробуйте позвонить print() , Я считаю, что эта функция является частью среды выполнения Rhino.

+0

все еще имеют ту же самую проблему, даже я меняю предупреждение по печати "[email protected]" –

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

Это возвращает то же самое

+0

'print()' в JavaScript будет выводиться, 'System.out.println()' не требуется –

+0

все еще имеет ту же ошибку "[email protected]" –

+0

'InterpretedFunction' не является ошибкой (хотя это делает выглядят как один). Это тип возвращаемого значения JavaScript, который интерпретируется как функция. Вы можете вызвать эту функцию, выполнив этот более сложный пример: http://stackoverflow.com/a/3981418/16959 –

0

другой вопрос с кодом заключается в том, что он просто определяет функцию, называемую calcul, но она не вызывает ее. Строительство от того, что @duskwuff сказал и удаления предупреждения, можно определить и вызвать функцию следующим образом:

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

я попробовал это, и она работала:

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) изменить шрифт в окне Message

2) положить весь код в метод, который он будет вызывать в html-коде , и вот так окно сообщения будет отображаться пользователю на экране

благодарит за вашу помощь.

Смежные вопросы