java javascript debugging scripting rhino

java - Función de impresión Rhino



javascript debugging (4)

Estoy usando Rhino 1.7R4 y env.js 1.2 para ejecutar código JavaScript dentro de Java

Quiero imprimir desde mi código JavaScript una cadena a la consola de Java.

De acuerdo con: http://evilroundabout.blogspot.com.au/2009/11/javascript-printing-rhino.html

Debería usar: imprimir ("Hola mundo");

pero cuando lo hago, obtengo:

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)

Si uso document.write, no veo ningún resultado.


No creo que funcione en modo integrado, creo que solo funcionará en la consola de Rhino.

Puede usar java.lang.system.out.println. Esto debería funcionar:-

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


Puedes crear el tuyo propio:

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


Puede usar el mismo alcance que usa el shell rinoceronte con bastante facilidad. El shell de rinoceronte se basa en una instancia de alcance especialmente construida llamada Global que define varias funciones como "imprimir". El ejemplo siguiente muestra cómo usar Global y la función "imprimir". Esto imprimirá "Hello World!" dos veces a stdout.

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

Descubrí esto a través de la experimentación después de cavar a través del ejecutable de shell Rhino .

Y en aras de la exhaustividad, aquí están las otras funciones globales definidas por Global :

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


a partir de enero de 2014, la lista de métodos y propiedades

new org.mozilla.javascript.tools.shell.Global( org.mozilla.javascript.Context.enter() )

parece ser el siguiente:

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