从文件中读取然后通过调用特定方法执行 Js 代码

我制作了一些 .txt 文件,其中只包含一种 JavaScript 方法。例如code.txt的内容是:

function method(){

    return 4;

}

现在我想读取特定文件并执行java脚本代码

这是我尝试过的:

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

tycotyco 回答:从文件中读取然后通过调用特定方法执行 Js 代码

没有返回结果,因为 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
}
    }
}
本文链接:https://www.f2er.com/924856.html

大家都在问