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