我有C++的DLL运行一个Java程序使用JNI,我想弄清楚如何捕获该Java程序的输出。我试过使用一个stringstream将stdout重定向到一个缓冲区,但这似乎只抓取来自我的dll的输出。我能做些什么来读取System.out?如何使用JNI将System.out从Java传递到C?
这就是我想现在,它不工作:
using namespace std;
stringstream buffer;
streambuf * old = cout.rdbuf(buffer.rdbuf());
//run java stuff here
我这样做之后,buffer.str()
仍然是空的,即使Java方法正确执行和有System.out的。 println()调用这些方法。如果我执行类似cout << "test" << endl;
的操作,则buffer.str()会获取该文本,因此它看起来不是缓冲区的问题。我在这里有什么选择?
我遇到同样的问题 - 只有我用printf()打印的东西被重定向到文件。 –
然后JVM重新打开stdin ......有趣的问题,我会再试着想一想。我认为你必须首先在Java方面进行破解 – Geoffroy