Ich habe ein Eclipse-Plugin (A), das von einem anderen Plugin (B) abhängig ist. Plugin B ist einfach ein Wrapper um ein Jar, der eine native DLL enthält und jni-Funktionalität ausführt. dieses Setup gegeben, ich habe den folgenden Code in A der Start-Methode des Activator Klasse:Wie kann ich die Ausgabe der JNI-Konsole in die Eclipse-Konsolenansicht umleiten, wenn das Eclipse-Plugin JNI verwendet?
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));
Wenn Plugin A seine Funktionalität durchführt, jegliche Verwendung von System.out geht tatsächlich auf die Konsole innerhalb von Eclipse. Aber der von JNI verwendete native Code schreibt auch in den Ausgabestream, den ich nicht erfassen kann. Während der Entwicklung geht die Ausgabe von JNI zur Konsole der Eclipse-Instanz, die die laufende Instanz gestartet hat, die die Plugins enthält.
Also wie greife ich den JNI-Ausgang und Anzeige in der Konsole?
Welche Funktion (en) protokollieren Nachrichten im systemeigenen Code? printf, fprintf, puts? ... Wären Sie in der Lage, den Code neu zu schreiben und die Logging-Funktion zu ändern? –
Da JNI beteiligt ist: Wie portabel muss eine Lösung sein? Auf welchen Plattformen sollte es mindestens funktionieren? –