代码之家  ›  专栏  ›  技术社区  ›  mipadi

Windows上的System.err在哪里?

  •  3
  • mipadi  · 技术社区  · 14 年前

    我有一个基于Java GUI的应用程序,它将一些诊断消息写入Syt.Out.Sturn.Err。在Windows上运行时,这些消息的输出位置是什么?(例如,在Mac OS X上,它们被打印到系统控制台日志中。)

    编辑

    我应该补充说,Java应用程序打包为.exe,因此(现在)我不能使用它来启动它。 java . (我想,我可以将单个.jar文件复制到Windows测试机。)

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

    6 回复  |  直到 14 年前
        1
  •  2
  •   Andrzej Doyle    14 年前

    这实际上取决于您如何启动应用程序。例如,如果要从Windows命令行提示符(例如 java -jar myApp.jar ,然后,正如您可能期望的那样,System.Out和System.Err都将转到控制台。如果您是通过WindowsShell本身启动的(例如双击可执行JAR),那么据我所知,这些错误流将丢失。将应用程序的执行设置为服务(无论在您的情况下听起来多么不可能)也会丢失输出流。

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

        2
  •  6
  •   Chad Okere    14 年前

    实际上,您可以使用 setout() setErr() .

    所以对于ExMaple,如果你想转储到一个文件,你可以这样做

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

    只要进去一次就行了 main(String[] args) 你应该走了。

        3
  •  3
  •   MartinStettner    14 年前

    如果你开始使用Java应用程序 java.exe ,它们被写入控制台。如果你开始使用 javaw.exe 由于没有为GUI应用程序重定向标准的输入/输出/错误,因此它们毫无用处。(您可以手动为 JavaW.EXE 并重定向输出,但我想这超出了范围)

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

        4
  •  2
  •   Community Egal    7 年前

    基于GUI的应用程序,在双击.jar文件时从javaw开始,不会输出system.out和system.err:

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

    “javaw”将所有输出吞咽到system.out和system.err。尝试“Java”代替(没有“W”)。

        5
  •  1
  •   cd1    14 年前

    System.err 如果通过命令行运行类,消息将打印在控制台上。如果你没有,你就看不到那些信息。

        6
  •  0
  •   Turing    14 年前

    你可以用 Java console 如果它是用Java运行的。