Функция печати Rhino

Я использую Rhino 1.7R4 и env.js 1.2 для запуска кода Javascript внутри Java

Я хочу напечатать из своего кода 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, я не вижу никакого вывода.

Ответ 1

Я не думаю, что это будет работать во встроенном режиме, я думаю, что он будет работать только в консоли Rhino.

Вы можете использовать java.lang.system.out.println. Это должно работать: -

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

Ответ 2

Вы можете использовать ту же область, что и оболочка носорога, довольно легко. Оболочка rhino основывается на специально сконструированном экземпляре области Global, который определяет несколько функций, таких как "print". Пример ниже демонстрирует, как использовать функцию Global и функцию "print". Это напечатает "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.

И для полноты здесь есть другие глобальные функции, определенные Global:

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

Ответ 3

Вы можете создать свой собственный:

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) );
}

Ответ 4

по состоянию на январь 2014 года список методов и свойств на

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