13

Java内でJavascriptコードを実行するためにRhino 1.7R4とenv.js 1.2を使用しています

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)

document.write を使用すると、出力が表示されません。

4

4 に答える 4

21

組み込みモードでは機能しないと思います。Rhino コンソールでのみ機能すると思います。

java.lang.system.out.println を使用できます。これはうまくいくはずです:-

java.lang.System.out.println("HELLO")
于 2012-09-13T04:47:43.070 に答える
15

サイの甲羅が使用するのと同じスコープを非常に簡単に使用できます。rhino シェルは、"print" などのいくつかの関数を定義する Global と呼ばれる特別に構築されたスコープ インスタンスに依存しています。以下のサンプルは、グローバルと「印刷」機能の使用方法を示しています。これにより、「Hello World!」が出力されます。stdout に 2 回。

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 シェル実行可能ファイルを掘り下げた後の実験で発見しました。

完全を期すために、 Globalで定義されたその他のグローバル関数を次に示します。

"defineClass",
"deserialize",
"doctest",
"gc",
"help",
"load",
"loadClass",
"print",
"quit",
"readFile",
"readUrl",
"runCommand",
"seal",
"serialize",
"spawn",
"sync",
"toint32",
"version"
于 2012-12-05T15:22:41.253 に答える
7

独自のものを作成できます:

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) );
}
于 2012-09-13T04:46:22.227 に答える