2012-09-13 191 views
11

我用犀牛1.7R4和env.js 1.2運行Java裏面犀牛打印功能

我想從我的JavaScript代碼的字符串打印到Java控制檯的JavaScript代碼。

據: http://evilroundabout.blogspot.com.au/2009/11/javascript-printing-rhino.html

我應該使用: 打印( 「世界你好」);

但是當我做,我得到:

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) 

如果我使用文件撰寫我沒有看到任何輸出。

+0

帶上您的javascript和java代碼。 – randominstanceOfLivingThing

回答

18

我不認爲這會在嵌入式模式下工作,我認爲只會在犀牛控制檯中工作。

您可以使用java.lang.system.out.println。這應該工作: -

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

您可以創建自己:

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

您可以使用相同的範圍,犀牛殼使用很容易。犀牛殼依賴於一個名爲Global的專門構建的範圍實例,它定義了幾個函數,如「print」。下面的示例演示瞭如何使用Global和「打印」功能。 這將打印「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 shell executable後,通過實驗發現了這一點。

而對於完整性這裏的目的是通過Global規定的其他全球性功能:

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

在我的答案中看到更新 – flow

5

爲2014年1月,方法和屬性上

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