我有一个 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));
当插件 A 执行其功能时,对 System.out 的任何使用实际上都会转到 Eclipse 内的控制台。但是 JNI 使用的本机代码也会写入输出流,我无法获取它。
在开发过程中,JNI 的输出将发送到已启动包含插件的运行实例的 Eclipse 实例的控制台。
那么如何获取 JNI 输出并显示在控制台中呢?
你可以尝试使用freopen http://www.cplusplus.com/reference/clibrary/cstdio/freopen/以与 Java 中完全相同的方式重定向 stdout,但在本机端。问题是,如果您在自己的插件中使用它(使用新的 JNI dll),这是否可行:可能需要在 dll 中使用它来执行控制台输出,我不知道跨 DLL 的流之间的交互。如果 stdout 引用整个过程的共享流,也许它会起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)