3

Javaでgroovyスクリプトを実行しています:

final GroovyClassLoader classLoader = new GroovyClassLoader();
Class groovy = classLoader.parseClass(new File("script.groovy"));
GroovyObject groovyObj = (GroovyObject) groovy.newInstance();
groovyObj.invokeMethod("main", null);

このメインメソッドは、変数に保存したい情報を出力します。どうすればできますか?

4

1 に答える 1

3

System.out を別のものにリダイレクトする必要があります..

もちろん、これがマルチスレッドの場合、問題が発生します

final GroovyClassLoader classLoader = new GroovyClassLoader();
Class groovy = classLoader.parseClass(new File("script.groovy"));
GroovyObject groovyObj = (GroovyObject) groovy.newInstance();

ByteArrayOutputStream buffer = new ByteArrayOutputStream() ;
PrintStream saveSystemOut = System.out ;
System.setOut( new PrintStream( buffer ) ) ;

groovyObj.invokeMethod("main", null);

System.setOut( saveSystemOut ) ; 
String output = buffer.toString().trim() ;

system.out にダンプするのではなく、スクリプトが何かを返すようにスクリプトを作成する方がおそらく (可能であれば) 良いでしょう。

于 2012-06-22T12:10:21.230 に答える