Ho un plugin Eclipse (A) che ha una dipendenza da un altro plugin (B). Il plugin B è semplicemente un wrapper attorno a un jar, che contiene una dll nativa, ed esegue la funzionalità jni. Dato questa configurazione, ho il seguente codice nel metodo start di di una classe Activator:Come posso reindirizzare l'output della console JNI alla vista di Eclipse Console, quando il plugin Eclipse utilizza JNI?
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));
Quando plug A svolge la sua funzionalità, qualsiasi utilizzo di System.out va in realtà alla console all'interno di Eclipse. Ma il codice nativo usato da JNI scrive anche sullo stream di output, che non posso afferrare. Durante lo sviluppo, l'output da JNI passa alla console dell'istanza Eclipse che ha avviato l'istanza in esecuzione, che contiene i plugin.
Quindi, come posso prendere l'uscita JNI e visualizzarla nella console?
Quali funzioni registrano i messaggi nel codice nativo? printf, fprintf, puts? ... Sareste liberi di riscrivere il codice, cambiando la funzione di logging? –
Dal momento che JNI è coinvolto: quanto portatile deve essere una soluzione? Su quali piattaforme dovrebbe funzionare almeno? –