Как перенаправить вывод консоли JNI в представление Eclipse Console, если плагин Eclipse использует JNI? - PullRequest
24 голосов
/ 24 октября 2010

У меня есть плагин Eclipse (A), который зависит от другого плагина (B). Плагин B - это просто оболочка для jar, которая содержит нативный dll и выполняет функции jni. Учитывая эту настройку, у меня есть следующий код в методе запуска класса A Activator:

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 и отобразить в консоли?

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Вы можете попробовать использовать freopen , чтобы перенаправить стандартный вывод точно так же, как в Java, но на нативной стороне. Вопрос в том, сработает ли это, если вы используете его в своем собственном плагине (с новым dll JNI): возможно, его придется использовать из dll, выполняя вывод на консоль, я понятия не имею о взаимодействии потоков между библиотеками DLL. , Если stdout ссылается на общий поток для всего процесса, возможно, он будет работать.

0 голосов
/ 31 мая 2011

Вы не можете, правда. Нативная DLL использует методы stdio, к которым вы не можете получить доступ из Java. Если вы пишете в System.out, среда выполнения Java в конечном итоге использует те же методы, но по понятным причинам изменения System.out не влияют на среду выполнения C.

Существует аппаратное решение: получите второй монитор, чтобы вы могли видеть терминал, в котором вы все время запускали Eclipse.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...