问题描述
我制作了一些 .txt
文件,其中只包含一种 JavaScript 方法。例如code.txt
的内容是:
function method(){
return 4;
}
这是我尝试过的:
public class read {
public static void main(String[] args) throws IOException,ScriptException {
ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("js");
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("code.txt")));
String content ="";
String code ="";
while((content = bufferedReader.readLine())!=null){
code+=content;
}
scriptEngine.eval(code);
}
}
我想从 method()
获取结果并检查返回值是否为 4
解决方法
没有返回结果,因为 ScriptEngine 没有被告知返回任何值和调用特定方法。在需要从另一个脚本调用方法的情况下,我们会怎么做当然我们会使用 INVOCABLE 接口接口的作用是调用在前一个脚本执行期间编译的脚本对象上的方法,该对象被保留在 ScriptEngine 的状态下所以在你的情况下你应该做的是将 scripEngine 类型转换为 Invocable
Invocable invocable = (Invocable)scriptEngine;
然后在 invokeFunction 方法的帮助下按名称调用您的函数
Object myResult = invocable.invokeFunction("yourMethodName",null);
如果您想检查返回的结果是否为 4,那么使用 if 条件应该很容易
if(myResult.equals(4)){
//do something
}
您的代码已修复
public class read {
public static void main(String[] args) throws IOException,ScriptException,NoSuchMethodException {
ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("js");
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("code.txt")));
String content ="";
String code ="";
while((content = bufferedReader.readLine())!=null){
code+=content;
}
Invocable invocable = (Invocable)scriptEngine;
invocable.invokeFunction("yourMethodName",null);
scriptEngine.eval(code);
if(myResult.equals(4)){
//do something
}
}
}