我正在使用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.
答案 0 :(得分:0)
我从CONCURRENT将LocalContextScope更改为THREADSAFE,这似乎解决了这个问题。