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

我们有一个基于Eclipse的Java应用程序(主类实现IApplication ),它是从Windows命令行启动的。 它在System.out上的输出不可见/打印到启动它的命令窗口中。 尽pipe如此,当输出pipe道more ,输出也很好。 怎么来的?

例如,考虑helloworld.exe 。 在命令窗口中运行C:\>helloworld.exe时,应用程序将简单地返回。 但是在运行C:\>helloworld.exe | more C:\>helloworld.exe | more ,屏幕显示

C:> helloworld.exe | 更多

你好,世界

C:>

在Linux上,输出很好。 如何在Windows上查看输出?

一些要求的信息:

  • 该应用程序是相当大的。 而且我可能无法削减。 输出是对System.out.prinln("xxx");简单调用System.out.prinln("xxx");
  • Java版本1.8.0_60 ,Eclipse 3.6.2
  • 使用>std.txt 2>err.txt显示输出确实在stdout上。
  • 行尾是CR / LF

.ini文件如下

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

也许这个问题是相关的?

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

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

当然,你必须找到你在RCP应用程序中使用的正确版本的春分启动程序。

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

你可以在这里阅读更多关于它: http : //wiki.eclipse.org/index.php/Starting_Eclipse_Commandline_With_Equinox_Launcher

编辑:当您使用基于eclipse.exe的启动程序时,无法获取控制台日志的原因是,因为在Windows上的eclipse.exe产生了一个单独的进程,这将导致另一个命令提示符窗口。

如果你的应用程序是通过eclipse.exe启动的(没有控制台附加到它)改变调用使用eclipsec.exe (有一个控制台附加到它,注意应用程序名称中的c )。

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

这是更便携和可维护。

在你的例子中,似乎你已经从你的java代码创建了一个exe文件。 我的猜测是你用来创建exe文件的打包程序对输出目标做了一些修改,因为它是你的java程序的一个包装。 尝试创建一个jar,然后尝试执行java -jar helloworld.jar。

字符串是stderr而不是stdout? (或其他方式取决于你的预期行为)。

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