2015-11-06 51 views
1

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

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

C:> helloworld.exe |更

的hello world

C:>

在Linux上,输出是罚款。如何在Windows上查看输出?

一些reqested信息:

  • 的应用是相当大的。我可能无法削减它。输出是简单的通话System.out.prinln("xxx");
  • Java版本1.8.0_60,Eclipse的3.6.2
  • 使用>std.txt 2>err.txt显示输出确实是在标准输出上。
  • 行结束CR/LF

.ini文件如下

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

也许this issue有关?

+0

向我们展示创建输出的代码部分。你的可执行文件旁边有一个helloworld._ini吗?哪个java版本?哪个日食版? – Marged

+0

'更多'可能会更加宽松的行结尾。也许你只有'\ r'或'\ n'。使用'...> out.txt 2> err.txt'来检查与NotePad ++等程序员编辑器的结尾。也许'flush()'可能需要,因为没有println完成, –

+0

我曾经有一个基于Eclipse 3.x的现成应用程序有类似的问题。当我使Eclipse使用java.exe而不是javaw.exe时,我只能看到Eclipse和底层插件的输出。但是这样做的缺点是从图标调用程序时总是显示额外的控制台窗口。除此之外,我们还创建了一个基于Java的包装器应用程序(有点矫枉过正;-)),它调用eclipse并显式设置传入和传出流以读取stdout和stderr输出。 – Marged

回答

1

可以启动使用春分启动基于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产生一个独立的过程,它会弹出另一个命令提示窗口。

0

你最好用一个框架来处理你的日志像logback

这是更便携和维护。

+0

谢谢。但它是一个现有的应用程序,我们的日志框架不会改变。而且,由于管道输出工作,我以某种方式怀疑Windows问题 –

0

在你的例子中,似乎你已经从你的java代码创建了一个exe文件。我的猜测是你用来创建exe的打包程序对输出目标进行了一些更改,因为它是你的java程序的一个包装。 尝试创建一个罐子来代替,而试图通过Java的罐子的HelloWorld.jar执行它。

+0

不,这是您的Eclipse框架引导一个完整的应用程序的方法。您复制eclipse.exe并将其配置为作为应用程序启动一些代码 – Marged

0

会在地方标准输出到标准错误的字符串? (或其他方式取决于您的预期行为)。

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

+0

控制台上不应同时显示stdour和stderr吗?那么为什么在输送时可以看到ouptut?但我会检查 –

3

如果您的应用程序正在通过某种方式eclipse.exe开始(有没有连接到它的控制台)更改为使用eclipsec.exe(附加了一个控制台,请注意在应用程序名称c)呼叫。