繁体   English   中英

如何使用JNI将System.out从Java传递到C?

[英]How do I pass System.out from Java to C using JNI?

我有使用JNI运行Java程序的C ++ dll,我试图弄清楚如何捕获该Java程序的输出。 我已经尝试过使用stringstream将stdout重定向到缓冲区,但这似乎只能抓住来自我dll的输出。 我该怎么做才能读入System.out?

这是我现在正在尝试的方法,它不起作用:

using namespace std;

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

完成此操作后,即使java方法正确执行并且这些方法中有System.out.println()调用, buffer.str()仍然为空。 如果我做类似cout << "test" << endl;事情cout << "test" << endl; ,buffer.str()获取该文本,因此缓冲区似乎没有问题。 我在这里有什么选择?

通过修改cout缓冲区,您不需要修改标准输出流,而只需修改用于封装它的对象。

要完全重定向输出,你必须freopen stdout到一个文件或管道,你可以在此了解更多信息的问题

然后,要获取Java代码的完整输出,可以在读取模式下打开相同的文件(或管道),只需获取所需的信息即可。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM