【问题标题】:Where is System.err on Windows?Windows 上的 System.err 在哪里?
【发布时间】:2010-01-18 00:11:50
【问题描述】:

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

编辑

我应该补充一点,Java 应用程序被打包为 .exe,所以(现在)我无法使用 java 启动它。 (我想我可以将各个 .JAR 文件复制到 Windows 测试机器上。)

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

【问题讨论】:

  • 哎呀,JAR 作为 EXE。为什么要将独立于平台的程序限制在一个平台上?
  • 打包——构建过程也可以为 Linux 创建一个 Mac OS X .app 或一组 JAR 文件(或 Web 启动应用程序)。

标签: java windows stdout stderr


【解决方案1】:

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

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

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

只需在main(String[] args) 中执行一次,您就可以开始了。

【讨论】:

  • 这是个好主意。我考虑过,但最终决定使用实际的日志框架。无论如何我都打算这样做...只是不是现在,但唉。无论如何,谢谢你的好答案!
【解决方案2】:

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

我建议改用一些日志框架并将消息写入日志文件。 log4jjava.util.logging 将是一个好的开始...

【讨论】:

    【解决方案3】:

    这实际上取决于您启动应用程序的方式。例如,如果您要从 Windows 命令行提示符(例如 java -jar myApp.jar)启动您的 GUI,那么您可能期望 System.out 和 System.err 都会进入控制台。据我所知,如果您通过 Windows shell 本身启动(例如,双击可执行 JAR),那么这些错误流将丢失。将应用程序的执行设置为服务(尽管在您的情况下听起来不太可能)也会丢失输出流。

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

    【讨论】:

    • 所有好的答案,但我认为这是最深入的。我还决定提高使用日志框架的计划,所以我认为这是最好的建议。
    【解决方案4】:

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

    Load java.util.logging.config.file for default initialization

    “javaw”将所有输出吞入 System.out 和 System.err。改用“java”(不带“w”)。

    【讨论】:

      【解决方案5】:

      System.err 消息会打印在控制台上,如果您通过命令行运行您的课程。否则,您将看不到这些消息。

      【讨论】:

        【解决方案6】:

        如果使用 java 运行,您可以使用 Java console

        【讨论】:

          猜你喜欢
          • 2012-01-04
          • 2012-11-24
          • 2010-10-03
          • 1970-01-01
          • 2012-09-08
          • 2017-08-03
          • 1970-01-01
          • 2013-07-04
          • 2012-10-16
          相关资源
          最近更新 更多