Java JNI-将标准输出连接到JTextArea?

Java JNI-将标准输出连接到JTextArea?,java,c++,swing,applet,java-native-interface,Java,C++,Swing,Applet,Java Native Interface,我想知道是否可以将C/C++dll的标准输出连接到JTextArea?问题是,我使用的是第三方DLL,所以我不能手动更改它们。 基本上,我有我的Java小程序,然后是我自己的DLL,它加载和管理第三方DLL,第三方DLL做一些事情,比如printf()。它在调试期间显示在Eclipse控制台中,但我希望它位于JTextArea或其他位置 编辑:为了澄清,我在win32 DLL中使用std::cout 谢谢您可以在DLL中将标准输出重定向到文件或管道。然后,您可以用Java读取文件或管道,并将读取

我想知道是否可以将C/C++dll的标准输出连接到JTextArea?问题是,我使用的是第三方DLL,所以我不能手动更改它们。 基本上,我有我的Java小程序,然后是我自己的DLL,它加载和管理第三方DLL,第三方DLL做一些事情,比如printf()。它在调试期间显示在Eclipse控制台中,但我希望它位于JTextArea或其他位置

编辑:为了澄清,我在win32 DLL中使用std::cout


谢谢

您可以在DLL中将标准输出重定向到文件或管道。然后,您可以用Java读取文件或管道,并将读取的内容复制到JTextArea。另一种选择是将DLL移动到它自己的进程中,从Java开始,然后从进程的stdout读取并写入JTextArea


SetStdHandle将允许您重定向标准输出。

什么是标准输出?如果是Posix文件句柄,那么就没有什么可以做的了 做你必须关闭它,然后打开一个临时文件,写入, 然后阅读Java部分。如果您实际使用的是std::cout 对于输出,可以(暂时)更改的streambuf
它需要使用stringbuf,然后将生成的字符串传递给Java。

我很难找到在Java中打开管道的方法。如果结果证明这是不可能的,另一种方法是让DLL将stdout作为套接字提供。方法如下:(1)创建一个管道。(2) SetStdHandle可将标准输出设置为管道的可写端。(3) 创建套接字,绑定到端口并等待连接。(4) 连接客户端时,从管道读取数据并将其数据写入套接字。(5)在爪哇中,连接到端口并从它复制数据到JTestTaRa。是的,我在C++ Win32中使用了STD::CUT。你能详细说明一下怎么做吗?比如:`std::stringbuf str;std::streambuf*save=std::cout.rdbuf();标准::cout.rdbuf(&str);//输出。。。标准::cout.rdbuf(保存);//最好使用RAII//Now将str.str()转换为Java字符串当然,如果您的代码输出到一个
std::ostream
,就像它应该输出的那样,那么没有问题:只需使用
std::ostringstream
。有人能告诉我如何才能使上述注释中的代码正确格式化吗?1。你知道你是否可以直接流到JTextArea的textspace中吗?2. 'str'和save'不能同时使用吗?3.有没有比让线程运行更好的方法,当它检测到缓冲区中的输入时,转换成java字符串并打印出来?@KaiserJohaan几乎肯定没有。几乎可以肯定,您必须创建一个java.lang.String对象,并将其传递到JTextArea对象中。(JTextArea中的文本空间是一个文档,它本身是一个复杂的类,可能包含嵌套文档等。它不是一个简单的缓冲区。)