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输出并在控制台中显示?
你不能,真的。本机 DLL 使用您无法从 Java 访问的 stdio 方法。如果写入 System.out,Java 运行时最终会使用相同的方法,但由于显而易见的原因,System.out 的更改对底层 C 运行时没有影响。
有一个硬件解决方案:获取第二个显示器,这样您就可以一直看到启动 Eclipse 的终端。
| 归档时间: |
|
| 查看次数: |
2029 次 |
| 最近记录: |