标签: rhino

Java 6的Rhino内置版本和Mozilla直接使用的Rhino软件包有什么区别?

我知道API非常不同,但是内置的JavaScript东西与Mozilla可以获得的Rhino构建之间是否有任何功能差异?

javascript java rhino

12
推荐指数
1
解决办法
4235
查看次数

如何在Rhino中输出内容?

我正在寻找与Python2.x相当的javascript print "hi".我正在使用ubuntu终端中的Rhino javascript解释器.当我输入:

document.write{"hi"}
Run Code Online (Sandbox Code Playgroud)

我得到'文档'未定义的错误.

javascript linux rhino

12
推荐指数
1
解决办法
1万
查看次数

Rhino打印功能

我正在使用Rhino 1.7R4和env.js 1.2在Java中运行Javascript代码

我想从我的Javascript代码中打印一个字符串到Java控制台.

根据:http: //evilroundabout.blogspot.com.au/2009/11/javascript-printing-rhino.html

我应该使用:print("Hello world");

但当我这样做时,我得到:

org.mozilla.javascript.EcmaError: ReferenceError: "print" is not defined. (svg-renderer-highcharts-2.1.4.js#20)
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687)
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665)
at org.mozilla.javascript.ScriptRuntime.notFoundError(ScriptRuntime.java:3750)
at org.mozilla.javascript.ScriptRuntime.nameOrFunction(ScriptRuntime.java:1794)
at org.mozilla.javascript.ScriptRuntime.getNameFunctionAndThis(ScriptRuntime.java:2188)
at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1308)
at script.renderSVGFromObject(svg-renderer-highcharts-2.1.4.js:20)
Run Code Online (Sandbox Code Playgroud)

如果我使用document.write,我看不到任何输出.

javascript java debugging scripting rhino

12
推荐指数
4
解决办法
2万
查看次数

YuiCompressorTask:"无法找到基本名称org.mozilla.javascript.resources.Messages,locale en_US的包"

我一直在我的项目上使用YuiCompressorTask(最新版本)很长一段时间没有任何问题.在OSX上升级到Oracle的Java 1.7软件包之后,它会出现以下异常(这是针对javascript文件;它适用于css文件):

[yuiCompress] java.lang.reflect.InvocationTargetException
[yuiCompress]   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[yuiCompress]   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[yuiCompress]   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[yuiCompress]   at java.lang.reflect.Method.invoke(Method.java:601)
[yuiCompress]   at com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:21)
[yuiCompress]   at ww.ant.YuiCompressorTask.execute(YuiCompressorTask.java:40)
[yuiCompress]   at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
[yuiCompress]   at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
[yuiCompress]   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[yuiCompress]   at java.lang.reflect.Method.invoke(Method.java:601)
[yuiCompress]   at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[yuiCompress]   at org.apache.tools.ant.Task.perform(Task.java:348)
[yuiCompress]   at org.apache.tools.ant.Target.execute(Target.java:390)
[yuiCompress]   at org.apache.tools.ant.Target.performTasks(Target.java:411)
[yuiCompress]   at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
[yuiCompress]   at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
[yuiCompress]   at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[yuiCompress]   at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
[yuiCompress]   at org.apache.tools.ant.Main.runBuild(Main.java:809)
[yuiCompress]   at org.apache.tools.ant.Main.startAnt(Main.java:217)
[yuiCompress]   at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
[yuiCompress]   at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
[yuiCompress] Caused by: java.util.MissingResourceException: Can't find bundle for …
Run Code Online (Sandbox Code Playgroud)

java yui rhino

11
推荐指数
2
解决办法
3809
查看次数

你如何使用Java来调用Rhino Javascript解释器?

是否有任何关于使用java方法调用rhino-javascript函数并将其返回给java的示例?我发现rhino的唯一例子是只在rhino shell上输入命令.

javascript java rhino serverside-javascript

10
推荐指数
1
解决办法
1万
查看次数

在javax.scripting javascript环境中导入地图

我在javax.scripting地图实现中看到了一些奇怪的行为.

在线示例显示了在js环境中添加到列表的示例:

ScriptEngineManager mgr = new ScriptEngineManager();
  ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
  List<String> namesList = new ArrayList<String>();
  namesList.add("Jill");
  namesList.add("Bob");
  namesList.add("Laureen");
  namesList.add("Ed");
  jsEngine.put("namesListKey", namesList);
  System.out.println("Executing in script environment...");
  try
  {
   jsEngine.eval("var names = namesListKey.toArray();" + "for(x in names) {" + "  println(names[x]);" + "}"
     + "namesListKey.add(\"Dana\");");
  } catch (ScriptException ex)
  {
   ex.printStackTrace();
  }
  System.out.println(namesList);
Run Code Online (Sandbox Code Playgroud)

但是,如果您尝试使用地图执行类似操作,则会看到奇怪的行为.首先,如果您尝试迭代地图键,例如

 HashMap<String, Object> m = new HashMap<String, Object>();
 jsEngine.put("map", m);
Run Code Online (Sandbox Code Playgroud)

无法获取地图密钥 - 如果您尝试迭代密钥,则会获得方法名称 -

jsEngine.eval(" for (var k in m.keySet()){ println(k)};");
Run Code Online (Sandbox Code Playgroud)

结果是 :

notifyAll
removeAll
containsAll …
Run Code Online (Sandbox Code Playgroud)

java rhino

10
推荐指数
1
解决办法
3760
查看次数

ANT脚本用于编译dir中的所有(css)LESS文件和使用RHINO的子目录

我想编译*.less特定文件夹中的所有脚本,并使用less-rhino-1.1.3.js进行子目录.

在github上有一个例子,用于为特定文件执行此操作,这非常有效.但是我想为一个完整的文件夹做同样的事情.我尝试了很多,这是我的最后一次尝试.

它不起作用,propertyregex似乎不是标准的ANT,我不想用这样的东西.我甚至不确定这段代码是否有用.

<project name="test" default="main" basedir="../../">
<property name="css.dir" location="public/css"/>
<property name="tool.less" location="bin/less/less-rhino-1.1.3.js"/>
<property name="tool.rhino" location="bin/tools/rhino/js.jar"/>
<macrodef name="lessjs">
    <attribute name="input" />
    <attribute name="output" />
    <sequential>
        <java jar="${tool.rhino}" fork="true" output="@{output}">
            <arg path="${tool.less}"/>
            <arg path="@{input}"/>
        </java>
        <echo>Lessjs: generated @{output}</echo>
    </sequential>
</macrodef>

<target name="main">
     <echo>compiling less css</echo>
     <fileset dir="${css.dir}" id="myfile">
          <filename name="**/*.less" />
     </fileset>
     <property name="lessfilename" refid="myfile"/>
     <propertyregex property="cssfilename"
          input="${lessfile}"
          regexp="^(.*)\.less$"
          replace="^\1\.css$" 
          casesensitive="true" />
     <lessjs input="lessfile" output="cssfilename"/>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)

ant rhino less

10
推荐指数
2
解决办法
1万
查看次数

我可以强制消除Rhino调用的重载方法的歧义吗?

参加以下测试:

public static class Scripted {
    public void setThing(List<?> list) {
        System.out.println("Set via list");
    }

    public void setThing(Object[] array) {
        System.out.println("Set array");
    }
}

@Test
public void testScripting() throws Exception {
    ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
    engine.getContext().setAttribute("s", new Scripted(), ScriptContext.ENGINE_SCOPE);
    engine.eval("s.thing = Array(1, 2, 3);");
}
Run Code Online (Sandbox Code Playgroud)

随着使用Java 7的Rhino版本运行,如果你运行它,你将得到如下的异常:

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: The choice of Java constructor setThing matching JavaScript argument types (object) is ambiguous; candidate constructors are:
    void setThing(java.util.List)
    void setThing(java.lang.Object[]) (<Unknown source>#1) in <Unknown source> at line number 1
Run Code Online (Sandbox Code Playgroud)

该 …

java overloading rhino

10
推荐指数
1
解决办法
2365
查看次数

java7/Rhino中编译与解释的javascript的性能

我在Java7中遇到Rhino javascript引擎的性能问题,很快 - 我的脚本(解析和编译文本)在Chrome中运行的速度比Java7 Rhino脚本引擎快50到100倍.

我试图找到改善情况的方法,并发现Rhino支持编译脚本.我尝试用我的脚本做这件事,实际上没有看到任何改进.最后 - 我最终得到了一个虚拟的短测试套件,我认为编译版和解释版之间的性能没有任何差别.请让我知道我做错了什么.

注意:有些消息来源提到Rhino引擎运行编译脚本比直接用Java编写的"相同"代码慢大约1.6.不确定此示例中使用的"脚本编译"是否与假设相同.

测试java类如下,我在我的机器上得到的样本结果......

结果

     Running via com.sun.script.javascript.RhinoScriptEngine@c50443 ... 
      time: 886ms, chars: 38890, sum: 2046720
      time: 760ms, chars: 38890, sum: 2046720
      time: 725ms, chars: 38890, sum: 2046720
      time: 765ms, chars: 38890, sum: 2046720
      time: 742ms, chars: 38890, sum: 2046720
       ... 3918ms


     Running via com.sun.script.javascript.RhinoCompiledScript@b5c292 @ com.sun.script.javascript.RhinoScriptEngine@f92ab0 ... 
      time: 813ms, chars: 38890, sum: 2046720
      time: 805ms, chars: 38890, sum: 2046720
      time: 812ms, chars: 38890, sum: 2046720
      time: 834ms, chars: 38890, sum: 2046720
      time: 807ms, chars: …

javascript rhino java-7

10
推荐指数
1
解决办法
1万
查看次数

Nashorn启动缓慢可以克服吗?

我使用Rhino作为图形内部的脚本组件.在该项目中,大约有200个小脚本独立运行.启动应用程序时,脚本应立即全速运行.Rhino的表现已经足够了,但是自从Oracle建议迁移到Nashorn之后,我面临着一个困境.

下图显示了Rhino和Nashorn之间的负载差异,大约有15,000个脚本调用.Nashorn的创业缓慢是我最大的问题.

注意,这是在JDK 1.8.0上.JDK 1.8u5是类似的

发动机性能比较

我希望图片清晰.

这是我如何使用ScriptEngine的概述:

  • 我正在使用One scripting Engine实例,
  • 我为每个脚本创建一个CompiledScript对象,
  • Swingworker执行一次CompiledScript.eval().
  • 每半秒SwingWorkers就会启动.
  • 每个CompiledScript都有自己的SimpleScriptContext实例,可以在每次执行时重复使用.

下面我提供了一个运行时配置文件,说明了引擎随时间的繁忙程度; 在此输入图像描述

有谁知道如何克服Nashorn的创业缓慢?


更新
2015 年4月15日在Java8u45上使用200个单独的脚本进行相同的测试.
性能要好得多!在Java7上以与Rhino类似的速度运行.

java performance rhino java-8 nashorn

10
推荐指数
1
解决办法
1525
查看次数