recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Comment appeler des méthodes en js en java?

Comment appeler des méthodes en js en java

// js 代码
STRING_UTIL = {};
STRING_UTIL.isNotEmpty = function (str){
    return "" != str;
}

// java 代码
Reader scriptReaderB = new InputStreamReader(
new FileInputStream(
    new File("F:\tech-study\js-comm\release\bundle.js")),"utf-8");
      
      
      engine.eval(scriptReaderB);
      // engine.eval(scriptReaderA);
      if (engine instanceof Invocable)  
      {  
          // 调用JS方法  
          Invocable invocable = (Invocable)engine;  
          Object result = invocable.invokeFunction("STRING_UTIL.isNotEmpty", new Object[]{"hahaha"});
          
          System.out.println(result.toString());

      }
// 调用异常
java.lang.NoSuchMethodException: no such method: STRING_UTIL.isNotEmpty
    at com.sun.script.javascript.RhinoScriptEngine.invoke(RhinoScriptEngine.java:286)
    at com.sun.script.javascript.RhinoScriptEngine.invokeFunction(RhinoScriptEngine.java:258)
    at AAAAAAA.main(AAAAAAA.java:29)

// 如果在添加一个全局函数
function isNotEmpty (str){
    return STRING_UTIL.isNotEmpty(str);
}

Changez la méthode d'appel en

Object result = invocable.invokeFunction("isNotEmpty", new Object[]{"hahaha"});

C'est comme ça que ça marche

天蓬老师天蓬老师2724 Il y a quelques jours1280

répondre à tous(3)je répondrai

  • 为情所困

    为情所困2017-07-05 10:28:55

    Après votre propre implémentation, vous pouvez utiliser deux méthodes pour y parvenir :

    1. Utilisez engine.eval
      Object result = engine.eval("STRING_UTIL.isNotEmpty('" + str + "')");

    2. Utilisez la méthode InvokeMethod pour implémenter
      Récupérez d'abord l'objet

    Object thiz = engine.get("STRING_UTIL");
    Ensuite, appelez la méthode en fonction de l'objet
    Object result = invocable.invokeMethod(thiz, "isNotEmpty", new Object[]{"hahaha"});

    Présentation d'un autre livre à tout le monde : "Compréhension approfondie de Java 7 : technologies de base et meilleures pratiques"
    Le deuxième chapitre ici est très détaillé. Si tu veux y aller, tu peux y jeter un oeil

    répondre
    0
  • 天蓬老师

    天蓬老师2017-07-05 10:28:55

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine javaScript = manager.getEngineByName("JavaScript");
    InputStream stream =
                        JS.class.getResourceAsStream("/js/test.js");
    BufferedReader reader =
                        new BufferedReader(new InputStreamReader(stream));
    javaScript.eval(reader);
    invocable = (Invocable) javaScript;
    invocable.invokeFunction("method");

    Description de la méthode invokeFunction Le premier paramètre est le nom de la méthode, les paramètres suivants sont tous des paramètres de méthode et la valeur de retour est un objet.

    répondre
    0
  • 怪我咯

    怪我咯2017-07-05 10:28:55

    Non
    java est un langage back-end, js est un langage front-end et le code js ne peut pas être ajusté en java

    répondre
    0
  • Annulerrépondre