0

I'm trying to call a javascript function from a java class, but I get these errors:

-Could not find method sun.misc.Service.installedProviders, referenced from method javax.script.ScriptEngineManager.initEngines

-Could not find method sun.misc.Service.providers, referenced from method javax.script.ScriptEngineManager.initEngines

-Could not find method sun.misc.Service.installedProviders, referenced from method javax.script.ScriptEngineManager.initEngines

-java.lang.VerifyError: javax.script.ScriptEngineManager

Here the code:

    public  void sendResult(){
    ScriptEngineManager manager = new ScriptEngineManager();
                    ScriptEngine engine = manager.getEngineByName("js");

                    String script = "function send() {"+"var id_result = window.MyPGP.getResult();"+                            
                            "document.getElementById('id_result').value = id_result;"+"console.log(\"change the box value\");";

                    try {
                        engine.eval(script);

                        Invocable invocableEngine = (Invocable) engine;

                        invocableEngine.invokeFunction("send");


   } catch (ScriptException e) {
                    e.printStackTrace();
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                }  catch (Exception e) {
                    e.printStackTrace();
                }

What I'm trying exactly to do is that when the payment is finished, this function is called in other methods in this class to get the result of the payment and it is printed in a box in the main html.

John Conde
  • 217,595
  • 99
  • 455
  • 496
luperxe
  • 51
  • 1
  • 2
  • 6
  • What has that to do with android? – Anders Metnik Jul 31 '12 at 11:45
  • It is a phonegap application based on android. – luperxe Jul 31 '12 at 11:49
  • @AndersMetnik Actually it is related to android. As we have to do code in different manner depending upon the platform. – coderslay Jul 31 '12 at 11:52
  • @luperxe You want to call a java script function which is in your `.html` file? Do you want to run that function in the background? – coderslay Jul 31 '12 at 12:01
  • @Coder_sLaY the javascript function I want to call is written in the code I posted. String script = "function send() {"+"var id_result = window.MyPGP.getResult();"+"document.getElementById('id_result').value = id_result;"+"console.log(\"change the box value\");"; Yes, I want to run it in the background. – luperxe Jul 31 '12 at 12:04
  • Was this issue ever resolved? – Jared Burrows May 15 '13 at 03:28

3 Answers3

2

use this code

import javax.script.*;

public class InvokeScriptFunction {
    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 hello(name) { print('Hello, ' + name); }";
        // 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("hello", "Scripting!!" );
    }
}

good luck

diegol
  • 21
  • 5
  • 1
    When giving an answer it is preferable to give [some explanation as to WHY your answer](http://stackoverflow.com/help/how-to-answer) is the one. – Stephen Rauch Feb 16 '17 at 03:37
0
 ScriptEngine engine = manager.getEngineByName("JavaScript");

Does this work?

Himanshu
  • 2,384
  • 2
  • 24
  • 42
0

You can do something like this

super.loadUrl("file:///android_asset/www/index.html", 20000);
super.loadUrl("javascript: { var pageFlag = '" + flag + "';}"); // Your Javascript function here
coderslay
  • 13,960
  • 31
  • 73
  • 121
  • But in that case, the javascript code would be executed when the application starts. What I want is to call the javascript code after a java execution – luperxe Aug 01 '12 at 06:44
  • What does you function do in background? – coderslay Aug 01 '12 at 06:50
  • My application consists on a paypal payment. I click a button in order to pay, some javascript methods are called, then, the java code is executed, and I obtain the result of the payment in a variable. What I want is to pass this variable to the html code, so, I need to call a javascript function that gets that value and prints it on the html. I've already done it, but I need to click in another button to see the result. What I want now is to see the result without clicking a button. – luperxe Aug 01 '12 at 07:10