qué lugar generalmente funciona entre ejemplos ejemplo ejecuta diferencia código cuestionario como codigo caracteristicas aprender java javascript rhino function-call

lugar - Llama a funciones javascript externas desde código java.



javascript caracteristicas (3)

Digamos que su archivo jsfunctions.js tiene una función "mostrar" y este archivo se almacena en C: /Scripts/Jsfunctions.js

jsfunctions.js

var display = function(name) { print("Hello, I am a Javascript display function",name); return "display function return" }

Ahora, en tu código java, te recomendaría que uses Java8 Nashorn. En tu clase de java,

import java.io.FileNotFoundException; import java.io.FileReader; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; class Test { public void runDisplay() { ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); try { engine.eval(new FileReader("C:/Scripts/Jsfunctions.js")); Invocable invocable = (Invocable) engine; Object result; result = invocable.invokeFunction("display", helloWorld); System.out.println(result); System.out.println(result.getClass()); } catch (FileNotFoundException | NoSuchMethodException | ScriptException e) { e.printStackTrace(); } } }

Nota: Obtenga la ruta de acceso absoluta de su archivo javascript y reemplácelo en FileReader () y ejecute el código java. Deberia de funcionar.

Al usar Java Scripting API, puedo ejecutar JavaScript dentro de Java. Sin embargo, ¿puede alguien explicar qué necesitaría agregar a este código para poder llamar a las funciones que están en C: /Scripts/Jsfunctions.js?

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 script1 = (String)"function hello(name) {print (''Hello, '' + name);}"; String script2 = (String)"function getValue(a,b) { if (a===/"Number/") return 1; else return b;}"; // evaluate script engine.eval(script1); engine.eval(script2); Invocable inv = (Invocable) engine; inv.invokeFunction("hello", "Scripting!!" ); //This one works. } }


Use ScriptEngine.eval(java.io.Reader) para leer el script

ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); // read script file engine.eval(Files.newBufferedReader(Paths.get("C:/Scripts/Jsfunctions.js"), StandardCharsets.UTF_8)); Invocable inv = (Invocable) engine; // call function from script file inv.invokeFunction("yourFunction", "param");


try { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); System.out.println("okay1"); FileInputStream fileInputStream = new FileInputStream("C:/Users/Kushan/eclipse-workspace/sureson.lk/src/main/webapp/js/back_end_response.js"); System.out.println("okay2"); if (fileInputStream != null){ BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream)); engine.eval(reader); System.out.println("okay3"); // Invocable javascriptEngine = null; System.out.println("okay4"); Invocable invocableEngine = (Invocable)engine; System.out.println("okay5"); int x=0; System.out.println("invocableEngine is : "+invocableEngine); Object object = invocableEngine.invokeFunction("backend_message",x); System.out.println("okay6"); } }catch(Exception e) { System.out.println("erroe when calling js function"+ e); }