2012-09-13 29 views
11

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

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: print ("Hola mundo");

pero cuando lo hago me sale:

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 ninguna salida.

+0

Trae tu javascript y java code. – randominstanceOfLivingThing

Respuesta

18

no creo que funcionará en modo incrustado, creo que sólo va a funcionar en la consola Rhino.

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

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

Usted puede crear su propia:

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

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 excavar a través de la Rhino shell executable.

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

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

ver la actualización en mi respuesta – flow

5

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

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

parecería 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