现代操作系统(以及几个较旧的操作系统)中的进程获得与之关联的三个标准“流”:
>标准输入:基于流的输入(stdin)
>标准输出:基于流的输出(标准输出)
>标准错误:基于流的错误输出(stderr)
他们被统称(并且创造性地)称为standard streams.
默认情况下,System.in,System.out和System.err是Java用于写入这些流的标准机制.
从命令行调用的程序在命令行中的键击转到stdin的环境中运行,并且stdout和stderr的输出在控制台中显示为文本.它们可以重定向到文件等.
通过GUI启动的程序通常不会将这些流挂钩到您可以看到的任何内容.
我上面说“默认”,因为您可以使用系统上的调用来更改这些流指向的位置(它们具有创新名称,如setIn,setOut和setErr.)
How do I open the console from a Runnable JAR file started by user with double-click?
那里有一个错误的相关性:罐子可以运行的事实不是你没有看到流的原因.如果在命令行运行可运行的jar,您将看到其标准输出.
如果你在没有与某种控制台相关联的情况下运行它,你是否可以看到该输出将取决于你如何运行它,以及可能如何编写它.许多GUI框架将标准输出重定向并将错误重定向到日志文件.或者应用程序可能提供这样做的调试选项.那里没有一个标准答案(没有双关语).