我有一个Eclipse插件(A),它依赖于另一个插件(B)。插件B只是一个包装了一个包含本地dll和执行jni功能的jar的包装器。
在这种设置下,我在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使用的本地代码也会写入输出流,我无法捕获。
在开发过程中,JNI的输出将发送到启动正在运行的实例所包含插件的Eclipse实例的控制台中。
那么,我该如何抓取JNI的输出并显示在控制台中呢?