2013-07-22 87 views
3

我使用GroovyShell类创建了一个groovy引擎。 然后我用“评估”方法运行一堆语句。
有没有办法捕捉引擎的输出,所以我可以得到“println”调用输出?
目前它转到stdout,虽然它是一个swing应用程序。如何捕获GroovyShell输出?

回答

2

您只需指定您的自定义作家(如StringWriter的),以out财产的结合,并把它传递给GroovyShell。

def binding = new Binding(); 
binding.setProperty("out", new YourWriter()) 
new GroovyShell(binding); 
1

您可以使用println方法设置scriptBaseClass,并且您可以在该值的基础上自由操作。请记住,用户仍然可以执行System.out.println,但如果需要,则可以执行you can blacklist

import org.codehaus.groovy.control.CompilerConfiguration 

def script = """ 
    a = 10 
    println a 
    println "echo" 
""" 

abstract class Printer extends Script { 
    void println(obj) { 
    this.binding.printed << obj 
    } 
} 

def config = new CompilerConfiguration(scriptBaseClass: Printer.class.name) 
def binding = new Binding([printed: []]) 

new GroovyShell(this.class.classLoader, binding, config).evaluate script 

assert binding.variables.printed.contains(10) 
assert binding.variables.printed.contains("echo") 
+0

谢谢。由于我是从java代码中完成的,你知道我应该如何定义Printer类(Java代码)吗? –

+0

既然你正在用Java编写'Printer',你是否遇到了'this.binding'? – Will

+0

谢谢,我已经想通了。 –