我正在使用Rhino 1.7R4和Java1.2在env.js中运行Javascript代码
我想从我的Javascript代码中打印一个字符串到Java控制台。
根据:http://evilroundabout.blogspot.com.au/2009/11/javascript-printing-rhino.html
我应该使用: print("Hello world");
但当我这样做时,我会得到:
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)如果我使用document.write,我看不到任何输出。
发布于 2012-09-13 12:47:43
我不认为这会在嵌入式模式下工作,我认为它只会在Rhino控制台中工作。
您可以使用java.lang.system.out.println。这应该是可行的:
java.lang.System.out.println("HELLO")发布于 2012-12-05 23:22:41
您可以很容易地使用rhino shell使用的相同作用域。rhino shell依赖于一个名为Global的特殊构造的scope实例,它定义了像"print“这样的几个函数。下面的示例演示了如何使用Global和"print“函数。这将打印"Hello World!“两次到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();
}
}我在深入研究Rhino shell executable之后,通过实验发现了这一点。
为了完整起见,下面是由Global定义的其他全局函数
"defineClass",
"deserialize",
"doctest",
"gc",
"help",
"load",
"loadClass",
"print",
"quit",
"readFile",
"readUrl",
"runCommand",
"seal",
"serialize",
"spawn",
"sync",
"toint32",
"version"发布于 2012-09-13 12:46:22
您可以创建自己的:
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) );
}https://stackoverflow.com/questions/12399462
复制相似问题