Windows上的System.err在哪里?

我有一个基于Java GUI的应用程序,它将一些诊断消息写入System.out和System.err。 在Windows上运行时,这些消息在哪里输出? (例如,在Mac OS X上,它们被打印到系统控制台日志中。)

编辑

我应该补充说,Java应用程序打包成.exe,所以(现在)我不能启动它使用java 。 (我想可以将单个.JAR文件复制到Windowstesting机器上。)

另外,这是我inheritance的一个应用程序,之前没有使用日志框架。 我想修改它使用一个,但我希望能够快速获得一些日志输出来诊断问题。

Solutions Collecting From Web of "Windows上的System.err在哪里?"

这真的取决于你如何启动你的应用程序。 例如,如果您要从Windows命令行提示符(例如, java -jar myApp.jar )启动GUI,那么您可能预期System.out和System.err都将转到控制台。 如果您通过Windows外壳本身启动(例如,双击可执行JAR),那么这些错误流将丢失,据我所知。 设置应用程序作为服务的执行(但不太可能听起来在你的情况),也将失去输出流。

在输入和输出流中使用标准通常不是一个好主意,除非您希望在shell脚本类型环境中调用您的程序,而这些环境是通用的通道。 正如你发现自己一样,这些在GUI环境中通常没有很好的定义。 如果您真的想在程序运行时捕获文本信息,请考虑使用“真实”日志框架(例如log4j或java.util.logging包)来捕获日志消息。

实际上你可以使用setout()和setErr()来更改System.out和System.err指向应用程序的位置。

所以例如,如果你想转储到一个文件,你可以做

 System.setOut(new PrintStream("output.txt")); System.setErr(new PrintStream("err.txt")); 

只要在main(String[] args)做一次,你应该很好。

AFAIK如果你使用java.exe启动你的Java应用程序,它们被写入控制台。 如果您使用javaw.exe启动它,则它们将无处可用,因为标准的in /​​ out / err不会重定向到GUI应用程序。 (你可以手动为javaw.exe创建一个子javaw.exe并重定向输出,但是我认为这超出了范围)

我会建议使用一些日志框架,而不是将消息写入日志文件。 log4jjava.util.logging将是一个好的开始…

当双击.jar文件时,以javaw开头的基于GUI的应用程序不会输出System.out和System.err:

加载java.util.logging.config.file以进行默认初始化

“javaw”吞下所有输出到System.out和System.err。 尝试“java”,而不是“w”)。

如果您通过命令行运行您的类, System.err消息打印在控制台上。 如果你不这样做,你将不会看到这些消息。

如果使用Java运行,则可以使用Java控制台 。