我有一个 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/