标签: rhino

parseInt 在 rhino 中返回 double

我有这个 JavaScript 文件(Rhino 1.7R4)。

importPackage(java.io);
importPackage(java.lang);
importPackage(java.util);

var reader = new BufferedReader( new InputStreamReader(System['in']) );

var line = reader.readLine();
var tok = new java.util.StringTokenizer(line);

var A = Integer.parseInt(tok.nextToken());
var B = Integer.parseInt(tok.nextToken());
var C = Integer.parseInt(tok.nextToken());

// System.out.printf( "A=%d, B=%d, C=%d\n", A, B, C );
System.out.printf( "A=%f, B=%f, C=%f\n", A, B, C );
Run Code Online (Sandbox Code Playgroud)

当我首先取消评论时printf- 我得到

A=Exception in thread "main" org.mozilla.javascript.WrappedException: Wrapped java.util.IllegalFormatConversionException: d != java.lang.Double
        at org.mozilla.javascript.Context.throwAsScriptRuntimeEx(Context.java:1754)
        at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:148)
        at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:225)
        at org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:52)
        at test._c_script_0(Unknown Source)
        at test.call(Unknown …
Run Code Online (Sandbox Code Playgroud)

rhino

5
推荐指数
1
解决办法
1841
查看次数

为什么Rhino对这个javascript不满意?

我已经在一些浏览器中成功地使用我的代码与ANTLR javascript目标中的javascript库,但现在我想在服务器上使用Rhino,我遇到了一些麻烦.我有一些简单的java代码引用了Rhino 1.7R2版本的js-14.jar文件.

Context context = Context.enter();
Scriptable scope = context.initStandardObjects();
context.evaluateReader(scope, new FileReader("C:\\antlr3-all.js"), "antlr", 1, null);
Run Code Online (Sandbox Code Playgroud)

这失败EcmaError的消息是:

TypeError: Cannot call property namespace in object [JavaPackage org.antlr]. 
It is not a function, it is "object". (antlr#259)
Run Code Online (Sandbox Code Playgroud)

它所指的javascript行是:

org.antlr.namespace("org.antlr.runtime.tree");
Run Code Online (Sandbox Code Playgroud)

org.antlr.namespace在文件的早期声明为函数,所以我不确定该怎么想.我也没有看到"命名空间"是javascript或Rhino中的保留字.

这是第org.antlr.namespace56行的声明:

org.antlr.namespace = function() {
    var a=arguments, o=null, i, j, d;
    for (i=0; i<a.length; i=i+1) {
        d=a[i].split(".");
        o=org.antlr.global;

        // ANTLR is implied, so it is ignored if it is included
        for (j=0; j<d.length; …
Run Code Online (Sandbox Code Playgroud)

javascript java antlr rhino

4
推荐指数
1
解决办法
2826
查看次数

使用rhino的JavaAdapter的示例

有人能为我提供一个如何使用Rhino的java适配器在java脚本中扩展java类的示例吗?

java scripting rhino adapter

4
推荐指数
1
解决办法
6001
查看次数

让Rhino JS看Java类

我正在玩Rhino,我已经成功使用了stdlib中的Java类,但没有使用我编译的Java代码.

例如,这工作正常:

print(new java.util.Date());
Run Code Online (Sandbox Code Playgroud)

但是使用NanoHTTPD(单个.java文件,没有名称空间,相同的文件夹),我根本就没有运气:

js> new Packages.NanoHTTPD()
js: "<stdin>", line 4: uncaught JavaScript runtime exception: TypeError: [JavaPackage NanoHTTPD] is not a function, it is object.
    at <stdin>:4
Run Code Online (Sandbox Code Playgroud)

我确信这很简单.我错过了什么?

编辑:我发布它是这样的:

$ CLASSPATH=. java -jar rhino.jar
Run Code Online (Sandbox Code Playgroud)

或这个:

$ java -classpath . -jar rhino.jar
Run Code Online (Sandbox Code Playgroud)

或者我将NanoHTTPD.java移动到文件夹"./nano"中,添加package nano;到文件顶部,编译它,然后替换为".".在上面的类路径分配中使用"nano".

无论我怎么做,从翻译中我看到:

js> java.lang.System.getProperty("java.class.path")
/Users/me/blah/rhino.jar
Run Code Online (Sandbox Code Playgroud)

javascript java rhino classpath

4
推荐指数
1
解决办法
9785
查看次数

JVM缺少Rhino

我有一个使用ScriptEngine来处理一些javascript的项目,并且在我的机器上运行良好,但是当我将项目的jar发送到服务器时,我发现服务器的JVM没有内置的Rhino,当返回null时返回null代码调用了一个

new ScriptEngineManager().getEngineByName("javascript");
Run Code Online (Sandbox Code Playgroud)

我去了rhino的下载页面,获取了最新的版本,并从中提取了js.jar,在项目中添加了jar,但仍然有同样的问题.

java rhino scriptengine

4
推荐指数
1
解决办法
2673
查看次数

如何使用rhino导入其他javascript文件

我不能为我的生活弄清楚如何在Rhino下的javascript中导入javascript文件.基本上,我想做的就是导入"some file.js"并能够在那里使用范围内的东西.

我一直在试图弄乱Context.currenctContext(compileString和compileReader),但是我不明白如何获得适当的Scope并且我不断地使用以下代码获取异常"找不到对象的默认值":

Context.currentContext.compileString("print('something')", "whatever, 0, null).exec(Context.currentContext, null)
Run Code Online (Sandbox Code Playgroud)

如果我不能创建我可以在我的javascript程序中重用的模块,这似乎很愚蠢......任何人都知道如何解决这个问题?

javascript rhino

4
推荐指数
1
解决办法
7470
查看次数

温莎和犀牛的自动模拟容器

我想和温莎一起做自动锁定,以便我可以做类似的事情

  _controller = _autoMockingContainer.Create<MyControllerWithLoadsOfDepdencies>();
Run Code Online (Sandbox Code Playgroud)

Ayende的 Rhino图书馆里曾经有一个Windsor自动模拟容器.但这似乎不再维持,所以依赖关系有点旧(它使用Castle Windsor 2,但我们需要引用2.5),因此导致dll地狱.

有没有可行的替代方案?我尝试从rhino测试中提取出相关的类,但是我可以处理的更多内容.

unit-testing castle-windsor rhino rhino-commons automocking

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

从javascript表达式获取变量(Rhino)

我正在使用Rhino来评估js表达式,方法是将所有可能的变量值放在作用域中并评估匿名函数.然而,表达式相当简单,我想只将表达式中使用的值放在表达式中.

代码示例:

    Context cx = Context.enter();

    Scriptable scope = cx.initStandardObjects(null);

    // Build javascript anonymous function
    String script = "(function () {" ;

    for (String key : values.keySet()) {
        ScriptableObject.putProperty(scope, key, values.get(key));
    }
    script += "return " + expression + ";})();";

    Object result = cx.evaluateString(scope, script, "<cmd>", 1, null);
Run Code Online (Sandbox Code Playgroud)

我想从变量名称的表达式中获取所有标记.

例如,如果表达式是

(V1ND < 0 ? Math.abs(V1ND) : 0)
Run Code Online (Sandbox Code Playgroud)

它会回来V1ND.

javascript java rhino

4
推荐指数
1
解决办法
1996
查看次数

使用Rhino的Javascript解析器,如何获取注释?

我有一些javascript文件,并使用Rhino的javascript解析器解析它.

但我无法得到评论.

我怎样才能得到评论?

这是我的代码的一部分.

运行此代码,"comment"变量为null.另外,在运行"astRoot.toSource();"时,它只显示javascript代码.没有评论.它消失了!

[java code]

public void parser() {
    AstRoot astRoot = new Parser().parse(this.jsString, this.uri, 1);

    List<AstNode> statList = astRoot.getStatements();
    for(Iterator<AstNode> iter = statList.iterator(); iter.hasNext();) {
        FunctionNode fNode = (FunctionNode)iter.next();

        System.out.println("*** function Name : " + fNode.getName() + ", paramCount : " + fNode.getParamCount() + ", depth : " + fNode.depth());

        AstNode bNode = fNode.getBody();
        Block block = (Block)bNode;
        visitBody(block);
    }

    System.out.println(astRoot.toSource());
    SortedSet<Comment> comment = astRoot.getComments();
    if(comment == null)
        System.out.println("comment is null");
}
Run Code Online (Sandbox Code Playgroud)

javascript java parsing comments rhino

4
推荐指数
1
解决办法
4347
查看次数

升级到ant 1.9.2后,Ant脚本importPackage不起作用

刚升级到含有ant 1.9.2的eclipse luna,我的<script>目标停止在这段代码中工作:

<script language="javascript"><![CDATA[
    importPackage(java.net);
    importPackage(java.io);
    ...
Run Code Online (Sandbox Code Playgroud)

错误信息:

 javax.script.ScriptException: ReferenceError: "importPackage" is not defined in <eval> at line number 2
Run Code Online (Sandbox Code Playgroud)

java eclipse ant rhino

4
推荐指数
1
解决办法
5179
查看次数