当Eclipse插件使用JNI时,如何将JNI控制台输出重定向到Eclipse Console视图?

mah*_*nya 24 eclipse console java-native-interface plugins redirect

我有一个Eclipse插件(A),它依赖于另一个插件(B).插件B只是一个jar包装器,它包含一个本机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));
Run Code Online (Sandbox Code Playgroud)

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

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

Aar*_*lla 0

你不能,真的。本机 DLL 使用您无法从 Java 访问的 stdio 方法。如果写入 System.out,Java 运行时最终会使用相同的方法,但由于显而易见的原因,System.out 的更改对底层 C 运行时没有影响。

有一个硬件解决方案:获取第二个显示器,这样您就可以一直看到启动 Eclipse 的终端。