【问题标题】:Rhino print function犀牛打印功能
【发布时间】:2012-09-06 03:21:04
【问题描述】:

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

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

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

我应该使用: print("你好世界");

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

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)

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

【问题讨论】:

  • 带上你的javascript和java代码。

标签: java javascript debugging scripting rhino


【解决方案1】:

您可以创建自己的:

function print() {
    for( var i = 0; i < arguments.length; i++ ) {
       var value = arguments[i];
       java.lang.System.out.print( value );
    }
    java.lang.System.out.println();
}

function printf( format ) {
    java.lang.System.out.printf( format, Array.prototype.slice.call(arguments) );
}

【讨论】:

    【解决方案2】:

    我认为这不会在嵌入式模式下工作,我认为这只会在 Rhino 控制台中工作。

    您可以使用 java.lang.system.out.println。这应该有效:-

    java.lang.System.out.println("HELLO")
    

    【讨论】:

      【解决方案3】:

      您可以很容易地使用 rhino shell 使用的相同范围。 rhino shell 依赖于一个名为 Global 的特殊构造的范围实例,它定义了几个函数,如“print”。下面的示例演示了如何使用 Global 和“打印”功能。 这将打印“Hello World!”两次到标准输出。

      import org.mozilla.javascript.Context;
      import org.mozilla.javascript.tools.shell.Global;
      
      /**
       * Hello world!
       *
       */
      public class App 
      {
          public static void main( String[] args )
          {
              System.out.println( "Hello World!" );
      
              Context cx = Context.enter();
              Global global = new Global(cx);
              cx.evaluateString(global, "print('Hello World!')", 
                      "helloWorld.js", 1, null);
              Context.exit();
          }
      }
      

      我在挖掘Rhino shell executable 之后通过实验发现了这一点。

      为了完整起见,这里是Global定义的其他全局函数:

      "defineClass",
      "deserialize",
      "doctest",
      "gc",
      "help",
      "load",
      "loadClass",
      "print",
      "quit",
      "readFile",
      "readUrl",
      "runCommand",
      "seal",
      "serialize",
      "spawn",
      "sync",
      "toint32",
      "version"
      

      【讨论】:

        【解决方案4】:

        截至 2014 年 1 月,

        上的方法和属性列表
        new org.mozilla.javascript.tools.shell.Global( org.mozilla.javascript.Context.enter() )
        

        应该是这样的:

        defineClass
        deserialize
        doctest
        gc
        getConsole
        getErr
        getIn
        getOut
        getPrompts
        help
        init
        init
        initQuitAction
        installRequire
        isInitialized
        load
        loadClass
        pipe
        print
        quit
        readFile
        readUrl
        runCommand
        runDoctest
        seal
        serialize
        setErr
        setIn
        setOut
        setSealedStdLib
        spawn
        sync
        toint32
        version
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多