Java 如何捕获GroovyShell输出?

Java 如何捕获GroovyShell输出?,java,groovy,groovyshell,Java,Groovy,Groovyshell,我使用GroovyShell类创建了一个groovy引擎。 然后我用“evaluate”方法运行了一系列语句。 是否有方法捕获引擎的输出,以便获取“println”调用输出? 尽管它是一个swing应用程序,但目前它还是转到了stdout。您可以使用println方法设置scriptBaseClass,并且您可以在该值的顶部自由操作。请记住,用户仍然可以执行System.out.println,但如果需要,可以执行 import org.codehaus.groovy.control.Compi

我使用GroovyShell类创建了一个groovy引擎。 然后我用“evaluate”方法运行了一系列语句。
是否有方法捕获引擎的输出,以便获取“println”调用输出?

尽管它是一个swing应用程序,但目前它还是转到了stdout。

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

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" )
import org.codehaus.groovy.control.CompilerConfiguration
def script=“”
a=10
印刷体a
println“echo”
"""
抽象类打印机扩展脚本{
无效打印LN(obj){

this.binding.printed您只需将自定义编写器(例如StringWriter)分配给绑定中的
out
属性,并将其传递给GroovyShell

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

谢谢。既然我是从java代码开始的,你知道我应该如何定义打印机类(java代码)吗?既然你是用java编写
打印机
,你对
这个绑定有困难吗?谢谢,我已经解决了。