2012-09-13 19 views
11

Używam Rhino 1.7R4 i env.js 1.2 do uruchomienia kodu Javascript wewnątrz JavaFunkcja drukowania Rhino

Chcę wydrukować z mojego kodu JavaScript ciąg do konsoli Java.

Według: http://evilroundabout.blogspot.com.au/2009/11/javascript-printing-rhino.html

należy używać: print ("Hello world");

ale kiedy mogę dostać:

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) 

Jeśli używam document.write nie widzę żadnego wyjścia.

+0

Wprowadź kod JavaScript i Java. – randominstanceOfLivingThing

Odpowiedz

18

nie sądzę, że będzie działać w trybie osadzonym, myślę, że będzie działać tylko w konsoli Rhino.

Można użyć java.lang.system.out.println. Powinno to zadziałać: -

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

Można tworzyć własne:

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

Możesz użyć tego samego zakresu, z jakiego korzysta bardzo łatwo skorupa nosorożca. Powłoka nosorożca opiera się na specjalnie skonstruowanym obiekcie o nazwie Global, który definiuje kilka funkcji, takich jak "print". Poniższy przykład pokazuje, jak korzystać z Global i funkcji "print". To wydrukuje "Hello World!" dwa razy na standardowe wyjście.

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

Odkryłem to poprzez eksperymenty po przekopaniu się przez Rhino shell executable.

I przez wzgląd na kompletność Oto pozostałe funkcje globalne zdefiniowane przez Global:

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

patrz aktualizacja w mojej odpowiedzi – flow

5

od stycznia 2014 roku, na listę metod i właściwości na

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

okaże się wykonaj następujące czynności:

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