我正在使用JDK的javax.script。*包。具体来说,我使用的是JavaScript引擎,据我所读,它似乎是基于Mozilla开发的名为Rhino的JavaScript-

in-Java解释器。

我希望完成的工作基本上是使我的JavaScript能够在代码中的某个点“暂停”自身(例如,在函数调用的一半),并且只有在Java允许的情况下稍后才能自我恢复。

为了说明我的意思,请想象以下JavaScript代码:

function myJSFunction() {

print("Hello ");

mysteriousPauseFunction(); // this is the part I'm wondering about. basically, the script should break here and resume later at Java's discretion...

// upon reaching this comment, we know now that Java has told JavaScript that it's okay to resume, so the next line will now be executed...

print("world");

}

如果“暂停”

/“中断”部分涉及绑定Java函数并将其引用传递给当前ScriptEngine或其他东西,那对我来说很酷。我认为这可能涉及:从Java内部暂停JavaScript。

我进行了一次谷歌搜索,发现这里的关键字似乎是“

continuations”。据我所知,Rhino仅支持解释模式下的延续(相对于编译模式),我认为这是通过将“上下文”设置为-2来实现的。既然内置的JDK

ScriptEngine似乎没有提到任何有关上下文的内容(或者我可能错过了),这是否意味着我必须直接下载并使用Mozilla的Rhino库?

我需要Rhino延续吗?我已经找到了有关Rhino延续的有用教程,但是在阅读完该教程之后,我不确定100%是否能够实现我上面描述的内容。如果这

是 我要查找的内容,那么我的后续问题是有关提到的“序列化”的问题:这是否意味着当我继续执行脚本时,除非对它们进行序列化,否则所有变量都将未设置?

更新: Rhino似乎可以做到这一点。到目前为止,这是我在JavaScript中拥有的东西;在代码之后,我将解释它的作用…

var end = new Continuation();

function myJSFunction()

{

print("Hello ");

var kont = new Continuation();

storePause(script, kont); // script is previously bound by Java into the JavaScript. it is a reference to the script itself.

end();

print("world");

}

我的“

storePause()”函数是我编写的Java函数,并且已绑定到JavaScript,但是现在,它什么也没做。我的下一个目标是充实其代码,以便将延续和脚本信息存储为Java对象,以便Java可以在以后恢复脚本。

现在,它的作用是在打印“ Hello”之后但在打印“ world”之前暂停/“破坏”脚本,因此向我证明了可以以这种方式暂停脚本。

因此,我现在只需要弄清楚的是如何恢复延续。请注意,以上默认情况下使用JDK脚本引擎工作(此时我不需要担心解释模式还是编译模式-

似乎默认为解释模式),但是它看起来像恢复脚本的过程将需要Mozilla的Rhino库。

java暂停脚本_用Rhino解析Java中的JavaScript:暂停/恢复脚本相关推荐

  1. java犀牛是什么意思_深入浅出Rhino:Java与JS互操作

    2011年10月6日,一年一度的JavaOne大会隆重举行.JavaOne2011大会的主题之一介绍针对不同Java平台的产品路线图,这其中包括移动版(ME,Micro Edition).标准版(SE ...

  2. active控件和java脚本_【学习笔记】在原生javascript中使用ActiveX和插件

    什么是插件 现在的浏览器提供了大量的内置功能,但仍然有一些工作无法完成,如播放音频和视频.插件及其扩展浏览器功能就尤为重要. 插件是可下载的应用程序,可以插入到浏览器中,现在有很多不同的插件,常用的有 ...

  3. 解析java源代码_一步步解析java执行内幕

    对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产品,在整个过 ...

  4. java main 运行_使用maven运行Java Main的三种方法解析

    导读热词 maven使用exec插件运行java main方法,以下是3种不同的操作方式. 一.从命令行运行 1.运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compi ...

  5. loadrunner java脚本_用loadrunner11写java脚本小例子(java Vuser)

    1.创建工程testHelloWorld 2.写个经典的HelloWorld类,代码如下: package jd.lt; public class HelloWorld { public String ...

  6. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  7. java 建立网站_建立基本的Java Web站点

    1.创建站点及虚拟目录.在Eclipse中创建新的Dynamic Web Project(这里命名为WebTest).在文件WebContent目录下新建index.html ,然后在Tomcat中创 ...

  8. java 判断类型_如何快速入门Java编程学习(干货)

    一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...

  9. java session使用_使用Neo4j和Java进行大数据分析 第2部分

    本文的第一部分介绍了Neo4j及其Cypher查询语言.如果您已经阅读了第1部分,那么您已经了解了为什么Neo4j和其他图形数据库特别受社交图形或网络中用户之间关系建模的影响.您还在开发环境中安装了N ...

最新文章

  1. Android:控件WebView显示网页
  2. ImportError: cannot import name ‘image‘ from ‘PIL‘ (C:\ProgramData\Anaconda3\lib\site-packages\PIL\_
  3. Python基础知识实例讲解
  4. 关于Android Studio dependencies 缓存的问题
  5. navicat卡死问题
  6. 文献记录(part3)--Clusterpath An Algorithm for Clustering using Convex Fusion Penalties
  7. apache在线升级yum_基于Redis实现在线游戏积分排行榜 - phyger
  8. 1.1 创建 Android 项目
  9. 任意角度旋转图片(python)
  10. wireshark抓包分析POP3协议
  11. 计算机msvcp110.dll丢失,msvcp110.dll丢失怎样修复
  12. [Synth 8-2543] port connections cannot be mixed ordered and named [“F:/FPGA_Prj/GPIC_2000/GPIC_AB/V1
  13. 简支梁模型振动位移matlab,不同移动载荷速度下简支桥梁的变形及振动响应研究...
  14. html为什么链接无效,如何揪出网页中的无效链接
  15. CVE-2018-6794一把梭
  16. go使用交叉编译时,二进制文件运行不了,出现line 1: syntax error: unexpected newline
  17. 心流——微妙的人际关系
  18. AI会给世界带来什么变化?世界著名机器人学家关于未来的预言!
  19. 05 -数据分析与SQL- Lesson5 SQL数据清理
  20. 一种踩内存的定位方法(C++)

热门文章

  1. 定位会完全压住标准流盒子里面的内容(HTML、CSS)
  2. docker下搭建JupyterNotebook远程登录
  3. 在Ubuntu16.04下安装cmake 和cmake-gui
  4. Anaconda Python3.6 OpenCV4.1.0 Ubuntu 16.04源码编译
  5. antimalware service executable占用内存_解决 vue 项目运行过程中内存泄漏问题
  6. Git学习笔记:常用命令总结
  7. 全志 A64 开发板移植SQLite3
  8. SSM-水果商城-项目架构-学习-3
  9. 【VS Code配置matlab】手把手教学,matlab也能自动补全+瞬间启动+代码整理!
  10. android触摸事件触摸点坐标,Android开发——触摸事件TouchEvent详解及其应用