如何通过java代码调用js

JavaScript06

如何通过java代码调用js,第1张

JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码。

在Java中直接调用js代码

不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert” is not defined。

package com.sinaapp.manjushri

import javax.script.ScriptEngine

import javax.script.ScriptEngineManager

import javax.script.ScriptException /** * 直接调用js代码 */

public class ScriptEngineTest {

public static void main(String[] args) {

ScriptEngineManager manager = new ScriptEngineManager()

ScriptEngine engine = manager.getEngineByName("javascript")

try{

engine.eval("var a=3var b=4print (a+b)")

// engine.eval("alert(\"js alert\")") // 不能调用浏览器中定义的js函数 // 错误,会抛出alert引用不存在的异常

}catch(ScriptException e){

e.printStackTrace()

}

}

}

可以跑,需要把编译格式改成1.7,就可以跑1.7的代码了。

Error:(422, 132) java: -source 1.7 中不支持 lambda 表达式,Java -version 查看了自己的版本之后 ,确认是1.8,pom 里面也全是1.8,最后排查maven的setting.xml 中有java的编译版本,改成1.7就可以了。

先看我框起来的这一行代码,aysncResult 的里面有有个 CompletableFuture ,它调用的是带超时时间的 get() 方法,超时时间是 Integer.MAX_VALUE,理论上来说效果也就等同于 get() 方法了。

从我直观上来说,这里用 get() 方法也应该是没有任何毛病的,甚至更好理解一点。

jdk编译格式的用法:

词法分析的任务是对由字符组成的单词进行处理,从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。执行词法分析的程序称为词法分析程序或扫描器。

源程序中的单词符号经扫描器分析,一般产生二元式:单词种别;单词自身的值。单词种别通常用整数编码,如果一个种别只含一个单词符号,那么对这个单词符号,种别编码就完全代表它自身的值了。若一个种别含有许多个单词符号,那么,对于它的每个单词符号,除了给出种别编码以外,还应给出自身的值。