如何使用JNI将System.out从Java传递到C? 我有C++的DLL,使用JNI运行java程序,我正在尝试找出如何捕获java程序的输出。我曾尝试使用stringstream将标准输出重定向到缓冲区,但这似乎只能获取来自dll的输出。我可以做些什么来读入System.out

如何使用JNI将System.out从Java传递到C? 我有C++的DLL,使用JNI运行java程序,我正在尝试找出如何捕获java程序的输出。我曾尝试使用stringstream将标准输出重定向到缓冲区,但这似乎只能获取来自dll的输出。我可以做些什么来读入System.out,java,c++,java-native-interface,Java,C++,Java Native Interface,这是我现在尝试的,但不起作用: using namespace std; stringstream buffer; streambuf * old = cout.rdbuf(buffer.rdbuf()); //run java stuff here 执行此操作后,buffer.str()仍然为空,即使java方法执行正确,并且这些方法中存在System.out.println()调用。如果我通过修改coutbuffer来执行类似cout的操作,那么您没有修改标准输出流,只是修改了用于封装它

这是我现在尝试的,但不起作用:

using namespace std;

stringstream buffer;
streambuf * old = cout.rdbuf(buffer.rdbuf());
//run java stuff here

执行此操作后,
buffer.str()
仍然为空,即使java方法执行正确,并且这些方法中存在System.out.println()调用。如果我通过修改
cout
buffer来执行类似
cout的操作,那么您没有修改标准输出流,只是修改了用于封装它的对象

要完全重定向输出,您必须将
freopen
stdout
重定向到一个文件或管道,您可以从中获得更多信息

然后,为了获得java代码的完整输出,您可以在读取模式下打开相同的文件(或管道),只需获得所需的信息


顺便说一句,在您的代码示例中,您不需要
stringstream
,只需要关联的
stringbuf
no?

我也有同样的问题-只有使用printf()打印的内容被重定向到文件。然后JVM重新打开stdin。。。有趣的问题,我明天再考虑一下。我认为你必须首先在Java方面破解它