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
Après votre propre implémentation, vous pouvez utiliser deux méthodes pour y parvenir :
Utilisez engine.eval
Object result = engine.eval("STRING_UTIL.isNotEmpty('" + str + "')");
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
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.
Non
java est un langage back-end, js est un langage front-end et le code js ne peut pas être ajusté en java