簡體   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