日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.11. java 脚本引擎

發(fā)布時(shí)間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.11. java 脚本引擎 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是腳本引擎,腳本引擎是指在程序運(yùn)行期間嵌入另一種腳本語言,并與其交互,產(chǎn)生最終運(yùn)行結(jié)果

腳本引擎存在的意義是什么?腳本引擎可以改變編譯語言的內(nèi)部運(yùn)行邏輯,彌補(bǔ)編譯語言的不足,使編譯語言具備動(dòng)態(tài)語言的一部分特性。

是否有成功案例?最成功的案例就是基于C++和Lua語言開發(fā)的端游(網(wǎng)游一種,需要按照客戶端),編譯語言最大的缺點(diǎn)就是客戶端升級(jí)需要重新安裝并且安裝之后重啟應(yīng)用程序才能生效。腳本引擎彌補(bǔ)了這項(xiàng)致命的缺點(diǎn),用戶只需升級(jí)劇情腳本,而不需要退出整個(gè)游戲然后重新進(jìn)入。

1.11.1.?Maven

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.netkiller</groupId><artifactId>script</artifactId><version>0.0.1-SNAPSHOT</version><name>Java Script</name><description>Java Script Engine</description><dependencies><!-- https://mvnrepository.com/artifact/org.mockito/mockito-all --><dependency><groupId>org.mockito</groupId><artifactId>mockito-all</artifactId><version>1.10.19</version></dependency></dependencies><build><sourceDirectory>src</sourceDirectory><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build> </project>

1.11.2.?Helloworld

package cn.netkiller.javascript;import java.util.List; import java.util.logging.Level; import java.util.logging.Logger;import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; import javax.script.ScriptException;public class Helloworld {public Helloworld() {ScriptEngineManager manager = new ScriptEngineManager();List<ScriptEngineFactory> factories = manager.getEngineFactories();for (ScriptEngineFactory f : factories) {System.out.println("egine name:" + f.getEngineName());System.out.println("engine version:" + f.getEngineVersion());System.out.println("language name:" + f.getLanguageName());System.out.println("language version:" + f.getLanguageVersion());System.out.println("names:" + f.getNames());System.out.println("mime:" + f.getMimeTypes());System.out.println("extension:" + f.getExtensions());System.out.println("-----------------------------------------------");}}public void hello() throws ScriptException {ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("JavaScript");// ScriptEngine engine = manager.getEngineByExtension("js");// ScriptEngine engine = manager.getEngineByMimeType("text/javascript");engine.eval("print('Hello, World')");}public static void main(String[] args) {try {new Helloworld().hello();} catch (ScriptException ex) {Logger.getLogger(Helloworld.class.getName()).log(Level.SEVERE, null, ex);}} }

1.11.3.?運(yùn)行腳本文件

將腳本放入外部文件

package javascript;import java.io.FileNotFoundException; import java.net.URL;import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException;public class EvalFile {public static void main(String[] args) {// TODO Auto-generated method stubScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByExtension("js");// ScriptEngine engine = manager.getEngineByMimeType("text/javascript");try {URL location = EvalFile.class.getProtectionDomain().getCodeSource().getLocation();String file = location.getFile() + "test.js";System.out.println(file);engine.eval(new java.io.FileReader(file));} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ScriptException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

test.js

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

1.11.4.?變量傳遞

package javascript;import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.HashMap; import java.util.Map;import javax.script.Bindings; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import javax.script.SimpleBindings;public class ScriptVars {ScriptEngine engine = null;public ScriptVars() {ScriptEngineManager manager = new ScriptEngineManager();engine = manager.getEngineByMimeType("text/javascript");}public void variable() throws ScriptException {engine.put("name", "Neo");engine.eval("var message = 'Hello, ' + name;");engine.eval("print(message);");Object obj = engine.get("message");System.out.println(obj);}public void simpleBindings() throws ScriptException {Bindings bindings = new SimpleBindings();bindings.put("name", "Neo");engine.eval("print('I am ' + name);", bindings);}public void function() throws ScriptException {engine.put("a", 4);engine.put("b", 6);Object maxNum = engine.eval("function max_num(a,b){return (a>b)?a:b;}max_num(a,b);");System.out.println("max_num:" + maxNum + ", (class = " + maxNum.getClass() + ")");Map<String, Integer> m = new HashMap<String, Integer>();m.put("c", 10);engine.put("m", m);engine.eval("var x= max_num(a,m.get('c'));");System.out.println("max_num:" + engine.get("x"));}public void object() throws ScriptException {File f = new File("test.txt");// expose File object as variable to scriptengine.put("file", f);// evaluate a script string. The script accesses "file"// variable and calls method on itengine.eval("print(file.getAbsolutePath())");}public void outputToFile() throws IOException, ScriptException {ScriptContext context = engine.getContext();context.setWriter(new FileWriter("script.log"));engine.eval("print('Hello World!');");}public static void main(String[] args) {// TODO Auto-generated method stubtry {ScriptVars sv = new ScriptVars();sv.variable();sv.simpleBindings();sv.outputToFile();sv.function();sv.object();sv.outputToFile();} catch (ScriptException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

1.11.5.?全局變量與局部變量定義

ScriptContext.GLOBAL_SCOPE 作用于 ScriptEngineManager, ScriptContext.ENGINE_SCOPE 作用于 ScriptEngine

package javascript;import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException;public class ContextVariable {public static void main(String[] args) throws ScriptException {// TODO Auto-generated method stubScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("JavaScript");ScriptContext context = engine.getContext(); context.setAttribute("name", "Netkiller", ScriptContext.GLOBAL_SCOPE); context.setAttribute("name", "Neo", ScriptContext.ENGINE_SCOPE); //context.getAttribute("name"); engine.eval("print('I am ' + name);", context);// engine1,context1 并沒有定義 name 但輸出結(jié)果卻顯示 Netkiller,所以ScriptContext.GLOBAL_SCOPE定義的變量是全局的。 ScriptEngine engine1 = manager.getEngineByName("JavaScript");ScriptContext context1 = engine1.getContext(); engine.eval("print('I am ' + name);", context1);}} import javax.script.*;public class MultiScopes {public static void main(String[] args) throws Exception {ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("JavaScript");engine.put("x", "hello");// print global variable "x"engine.eval("print(x);");// the above line prints "hello"// Now, pass a different script contextScriptContext newContext = new SimpleScriptContext();Bindings engineScope = newContext.getBindings(ScriptContext.ENGINE_SCOPE);// add new variable "x" to the new engineScopeengineScope.put("x", "world");// execute the same script - but this time pass a different script contextengine.eval("print(x);", newContext);// the above line prints "world"} }

1.11.6.?調(diào)用腳本中的函數(shù)或方法

package javascript;import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException;public class InvokeScriptFunction {public static void main(String[] args) throws ScriptException, NoSuchMethodException {// TODO Auto-generated method stubScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("JavaScript");// JavaScript code in a StringString script = "function hello(name) { print('Hello, ' + name); }";// evaluate scriptengine.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 code in a String. This code defines a script object 'obj'// with one method called 'hello'.script = "var obj = new Object(); obj.hello = function(name) { print('Hello, ' + name); }";// evaluate scriptengine.eval(script);// get script object on which we want to call the methodObject obj = engine.get("obj");// invoke the method named "hello" on the script object "obj"inv.invokeMethod(obj, "hello", "Script Method !!");} }

1.11.7.?腳本編譯

只有重復(fù)執(zhí)行腳本時(shí)才需要編譯。只運(yùn)行一次不建議編譯運(yùn)行。

package javascript;import javax.script.*;public class ScriptCompile {public CompiledScript compile(String script) throws ScriptException {ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("JavaScript");return ((Compilable) engine).compile(script);}public static void main(String[] args) {// TODO Auto-generated method stubScriptCompile sc = new ScriptCompile();try {CompiledScript script = sc.compile("print('Helloworld!!!');");for (int i = 0; i < 100; i++) {script.eval();}} catch (ScriptException ex) {ex.printStackTrace();}}}

1.11.8.?jjs - Invokes the Nashorn engine.

jjs 是一個(gè)在命令行運(yùn)行腳本的命令

創(chuàng)建腳本文件

[neo@netkiller tmp]$ cat test.js function f() { return 1; }; print( f() + 1 );

運(yùn)行結(jié)果

[neo@netkiller tmp]$ jjs test.js 2




原文出處:Netkiller 系列 手札
本文作者:陳景峯
轉(zhuǎn)載請(qǐng)與作者聯(lián)系,同時(shí)請(qǐng)務(wù)必標(biāo)明文章原始出處和作者信息及本聲明。

總結(jié)

以上是生活随笔為你收集整理的1.11. java 脚本引擎的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一区二区三区免费在线观看 | 图片区亚洲 | 亚洲午夜无码久久久久 | 色婷婷六月天 | 超碰久草 | 初尝黑人巨炮波多野结衣 | 青青久在线视频 | 亚洲最大福利视频网 | 天天天天天天天干 | 69毛片 | 艹少妇视频 | 国产欧美在线 | 国产精品日韩一区二区三区 | 明日叶三叶 | 欧美大片视频在线观看 | 97人人模人人爽人人少妇 | 国产人久久人人人人爽 | 国产尤物精品 | 久草视频在线播放 | 亚洲欧美bt | 久久国产成人精品av | 国产农村妇女精品 | 成人黄色性视频 | 看片国产 | 白浆av| 欧美三级一级片 | 国产精品入口久久 | 国产亚洲精品久久久久久久 | 中文字幕高清av | 香蕉视频性 | 日韩国产二区 | 91福利社在线观看 | 女教师三上悠亚ssni-152 | 日韩第一视频 | 97影院在线午夜 | 91调教打屁股xxxx网站 | 免费看操片| 日韩一级一区 | 久久人妻免费视频 | 精品视频一区二区在线观看 | 91口爆一区二区三区在线 | 中文字幕人妻一区二区在线视频 | 在线观看欧美精品 | av中文字幕在线播放 | 人妻一区二区三 | 久久久精品视频在线 | 久久精品三级 | 免费国偷自产拍精品视频 | 四虎黄色网 | 天天操夜夜草 | 亚洲人成网址 | 女人叫床很黄很污句子 | 黄色一级小视频 | 非洲黄色一级片 | 香蕉人妻av久久久久天天 | 亚洲在线视频观看 | 欧美大胆视频 | 国产精品无码一区二区三 | 中文字幕乱妇无码av在线 | 中文字幕免费视频观看 | 综合激情在线 | 国产色悠悠 | 激情五月色婷婷 | 成人av网站大全 | 国产一级片免费 | 亚洲欧美成人 | 痴汉电车在线播放 | 日本三级黄色录像 | 免费爱爱视频网站 | 成人性生交生交视频 | 一本久久综合亚洲鲁鲁五月天 | 国产成人自拍网站 | 日本色www| 肥婆大荫蒂欧美另类 | 欧美裸体网站 | 美女扒开尿口给男人捅 | 日在线视频 | 欧美 日本 国产 | 色婷婷国产精品综合在线观看 | 久草在现| 澳门黄色| 超碰资源在线 | 午夜一区二区三区免费观看 | 精品国产91久久久久久久妲己 | 狠狠躁夜夜躁人人爽视频 | 精品嫩模一区二区三区 | 美女搡bbb又爽又猛又黄www | 亚色影库 | 懂色av蜜臀av粉嫩av喷吹 | 在线播放日韩av | 久久精品黄aa片一区二区三区 | 九九九在线 | 99黄色网 | 久久一二三区 | 欧美精品一区二区三区久久久 | 3d动漫精品啪啪一区二区竹菊 | 在线亚洲欧美 | 波多野结衣欧美 | 日本黄色免费看 |