专栏名称: 程序员大咖
为程序员提供最优质的博文、最精彩的讨论、最实用的开发资源;提供最新最全的编程学习资料:PHP、Objective-C、Java、Swift、C/C++函数库、.NET Framework类库、J2SE API等等。并不定期奉送各种福利。
目录
相关文章推荐
阿里云云栖号  ·  一周AI大事件 ·  13 小时前  
京东零售技术  ·  前沿论文分享 | ... ·  3 天前  
OSC开源社区  ·  OpenAI用Rust重写AI编程工具Cod ... ·  6 天前  
程序员的那些事  ·  “令人作呕!” 马斯克刚离职没几天就开喷了 ·  4 天前  
程序员的那些事  ·  AI 编程工具 Windsurf 突遭 ... ·  4 天前  
51好读  ›  专栏  ›  程序员大咖

Java脚本化编程指南

程序员大咖  · 公众号  · 程序员  · 2017-03-03 19:21

正文

请到「今天看啥」查看全文


engine.eval( new java.io.FileReader(args[ 0 ]));      }   }

假设我们有一个叫"test.js"的文件,里面的内容如下:

println("This is hello from test.js");

我们可以使用下面的方式来运行刚刚的脚本

java EvalFile test.js

脚本变量


当你的java应用程序嵌入脚本引擎和脚本,你可能希望将您的应用程序对象为全局变量暴露于脚本中。这个例子演示了如何将您的应用程序对象作为全局变量暴露于脚本中。我们在应用程序中创建一个 java.io.File对象作为全局变量,名称是file。该脚本可以访问变量,例如,它可以调用它的公共方法。注意访问java对象、领域和方法的语法依赖于脚本语言。JavaScript支持最“自然”的类似java的语法。

public class ScriptVars {    
    public static void main(String[] args) throws Exception {   
        ScriptEngineManager manager = new ScriptEngineManager();   
        ScriptEngine engine = manager.getEngineByName("JavaScript");   

        File f = new File("test.txt");   
        // expose File object as variable to script   
        engine.put("file", f);   

        // evaluate a script string. The script accesses "file"    
        // variable and calls method on it   
        engine.eval("print(file.getAbsolutePath())");   
    }   
}

调用脚本函数和方法


有些时候,你可能需要多次调用一个特定脚本函数,例如你的应用程序菜单功能可能由脚本来实现。在菜单中的操作事件处理程序中,可能需要调用一个特定的脚本函数。下面的示例演示在Java代码调用一个特定的脚本。

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 script = "function hello(name) { print('Hello, ' + name); }";   
        // evaluate script   
        engine.eval(script);   

        // javax.script.Invocable is an optional interface.   
        // Check whether your script engine implements or not!   
        // Note that the JavaScript engine implements Invocable interface.   
        Invocable inv = (Invocable) engine;   

        // invoke the global function named "hello"   
        inv.invokeFunction("hello", "Scripting!!" );   
    }   
}

如果你的脚本语言是基于对象(如JavaScript)或面向对象的,你可以在脚本对象上调用脚本方法。

import javax.script.*;   

public class InvokeScriptMethod {   
    public static void main(String[] args) throws Exception {   
        ScriptEngineManager manager = new ScriptEngineManager();   
        ScriptEngine engine = manager.getEngineByName("JavaScript"






请到「今天看啥」查看全文