Я встраиваю JRuby с помощью Red Bridge в приложение и, похоже, возникают проблемы с установкой и ошибкой. В моих тестах используется PrintStream
, который записывает в StringBuilder
, после выполнения каких-либо действий с JRuby я проверяю материал, напечатанный с помощью puts
. Проблема только в первых setOutput
работах, на которые печатается каждый.
Простой пример ниже демонстрирует проблему. Он использует PrintStream
s, которые пишут в разные файлы, чтобы продемонстрировать проблему. Просмотр вашей файловой системы покажет, что все идет к первому «файлу», когда можно ожидать, что файлы 2 и 3 также будут записаны.
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();
}
}
}
Я пробовал ScriptingContainer.resetWriter
, но это не работает, как можно было ожидать. Иногда вещи записываются в файлы 1 и 2, но ничего не записываются в 3.