基于 Eclipse 的应用程序在 Windows 命令行上的输出仅在通过管道传输时可见(不直接在 cmd 中)

Output of application based on Eclipse on Windows command line only visible when piped (not directly in cmd)

我们有一个基于 Eclipse 的 Java 应用程序(主要 class 实现 IApplication),它是从 Windows 命令行启动的。它在 System.out 上的输出不会 visible/printed 到启动它的命令 window 中。然而,当将输出通过管道传输到 more 时,输出是好的。怎么会?

例如,考虑 helloworld.exe。当 运行 C:\>helloworld.exe 命令中 window 时,应用程序只是 returns。但是当运行C:\>helloworld.exe | more时,屏幕显示

C:>helloworld.exe | more

hello world

C:>

在 linux 上,输出正常。如何查看 Windows 上的输出?

一些要求的信息:

.ini文件如下

--launcher.suppressErrors
-vmargs
-Xms256m
-Xmx4096m
-Djava.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory
-Djava.library.path=plugins

也许 this issue 相关?

你最好使用一个框架来处理你的日志,比如 logback

这更便于移植和维护。

在您的示例中,您似乎已经从 java 代码创建了一个 exe。我的猜测是你用来创建 exe 的打包器对输出目标做了一些更改,因为它是你的 java 程序的包装器。 尝试创建一个 jar 并尝试通过 java -jar helloworld.jar.

执行它

字符串是否会发送到 stderr 而不是 stdout? (或者反过来,取决于您的预期行为)。

https://support.microsoft.com/en-us/kb/110930

您可以使用 equinox 启动器启动基于 Eclipse RCP 的应用程序,如下所示:

java -jar plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar

当然,您必须找到您在 RCP 应用程序中使用的正确版本的 Equinox 启动器。

这样你会看到控制台日志。

您可以在这里阅读更多相关信息:http://wiki.eclipse.org/index.php/Starting_Eclipse_Commandline_With_Equinox_Launcher

编辑:当使用基于 eclipse.exe 的启动器时,您没有获得控制台日志的原因是因为 eclipse.exe 在 Windows 上产生了一个单独的进程,它会弹出另一个命令提示符 window.

如果您的应用程序以某种方式通过 eclipse.exe 启动(没有连接到它的控制台)更改调用以使用 eclipsec.exe(连接到它的控制台,请注意 c 在应用程序名称中)。