eclipse - 当 Eclipse 插件使用 JNI 时,如何将 JNI 控制台输出重定向到 Eclipse 控制台 View ?

标签 eclipse plugins redirect console java-native-interface

我有一个 Eclipse 插件 (A),它依赖于另一个插件 (B)。插件 B 只是一个 jar 的包装器,它包含一个 native dll,并执行 jni 功能。
鉴于此设置,我在 A 的 Activator 类的 start 方法中有以下代码:

MessageConsole jniConsole = new MessageConsole("Opereffa Output", null);
ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[] { jniConsole });
ConsolePlugin.getDefault().getConsoleManager().showConsoleView(jniConsole);
MessageConsoleStream stream = jniConsole.newMessageStream();
System.setOut(new PrintStream(stream));
System.setErr(new PrintStream(stream));

当插件 A 执行其功能时,对 System.out 的任何使用实际上都会转到 Eclipse 中的控制台。但是 JNI 使用的 native 代码也会写入输出流,我无法抓取。
在开发过程中,JNI 的输出进入 Eclipse 实例的控制台,该实例已启动运行实例,其中包含插件。

那么如何获取 JNI 输出并显示在控制台中呢?

最佳答案

您可以尝试使用 freopen以与在 Java 中完全相同的方式重定向 stdout,但在 native 端。问题是,如果您在自己的插件中使用它(使用新的 JNI dll),这是否可行:它可能需要在执行控制台输出的 dll 中使用,我不知道跨 DLL 的流之间的交互.如果 stdout 指的是整个过程的共享流,也许它会起作用。

关于eclipse - 当 Eclipse 插件使用 JNI 时,如何将 JNI 控制台输出重定向到 Eclipse 控制台 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008675/

相关文章:

eclipse - 无法将我的 spring web 项目部署到 eclipse 内部 tomcat 服务器。(tomcat 启动时出现 java.lang.ClassNotFoundException)

java - Eclipse 成员排序顺序与 Oracle Java 代码约定

javascript - 我怎样才能在chartjs-node-canvas中实现chartjs-plugin-datalabels?

ruby - Vim 的 Ruby 插件问题

redirect - 如果 feed 的 url 发生变化,RSS 阅读器能否跟随重定向?

c# - Response.Redirect 偶尔会忽略 URL 编码

java - IllegalAccessError 仅在导出的签名 APK 上

java - JDBC 连接已连接但没有查询结果到结果集

internet-explorer - 强制 Internet Explorer 使用特定的 Java 运行时环境安装?

JavaScript 重定向回引用页面