启动新的JRuby ScriptingContainer并设置Output&错误PrintStreams

时间:2011-08-02 04:07:54

标签: jruby

我正在使用Red Bridge将JRuby嵌入到应用程序中,并且似乎在设置和错误方面存在问题。我的测试使用写入PrintStream的{​​{1}},在用JRuby做一些东西之后,然后用StringBuilder检查打印出来的东西。问题是只有第一个puts作品才能打印出来。

下面的简单示例演示了该问题。它使用setOutput来写入不同的文件来演示问题。查看您的文件系统将显示当人们希望文件2和3也被写入时,所有内容都会转到第一个“文件”。

PrintStream

我已经尝试了package XXX.jruby; import java.io.PrintStream; import org.jruby.embed.LocalContextScope; import org.jruby.embed.LocalVariableBehavior; import org.jruby.embed.ScriptingContainer; public class JRubyShellPutsProblem { public static void main(String[] args) throws Exception { for (int i = 0; i < 3; i++) { final ScriptingContainer container = new ScriptingContainer(LocalContextScope.CONCURRENT, LocalVariableBehavior.PERSISTENT); // container.resetWriter(); // container.resetErrorWriter(); final PrintStream printStream = new PrintStream("d:\\out" + i + ".txt"); container.setOutput(printStream); container.setError(printStream); container.runScriptlet("puts \"hello" + i + "\"\n"); printStream.flush(); container.terminate(); } } } ,但这并不像人们期望的那样有效。有时候东西会被写入文件1和2但不会写入3.

1 个答案:

答案 0 :(得分:0)

我从CONCURRENT将LocalContextScope更改为THREADSAFE,这似乎解决了这个问题。