可执行jar中的“System.out.println()”会发生什么?
假设我已经从我使用过的代码中创建了一个executable jar
System.out.println()
当我们运行可执行jar时,没有控制台。 那么,这条线会发生什么? java
如何处理这种情况?
编辑01 :
注意 :情况是当我不使用控制台运行jar
或任何控制台与它关联时。
编辑02 :让事情更清晰:
我知道没有任何东西可以在任何地方打印,因为没有控制台..! 我想知道java
在这种情况下如何处理这一行? 生成可执行jar的字节码时是否省略了这一行? 或者,当没有控制台时,这条线是否被忽略了? 还是什么……
在可执行jar文件中运行代码没什么特别之处。 如果从控制台运行它,例如使用java -jar foo.jar
,输出仍将转到控制台。
如果以某种方式运行代码而不附加控制台 – 例如Windows上的javaw
,这是与可执行jar文件关联的默认程序 – 那么输出将不会出现在任何地方。 它不会导致任何错误 – 文本将丢失。
请注意,在这种情况下,如果您使用System.console()
, 那将返回null
。 所以:
System.out.printf("Foo%n"); // No problem. Goes nowhere. System.console().printf("Foo%n"); // Would throw a NullPointerException.
只要您不从控制台窗口( java -jar executable.jar
)运行应用程序,就会省略输出。 此外,您可以配置Java安装,以便在启动Java应用程序时立即启动控制台窗口。 然后输出将写入JVM的控制台窗口。 您可以找到一篇文章如何启用和查看Java控制台? 在Java官方网站上。
我从控制台(java -jar YourJar.jar)打开它,文本将在控制台窗口中打印出来。
如果您在资源管理器(或类似)中打开它,您将看不到该文本
澄清你的第二个编辑:字节码没有被省略,因为编译器无法知道jar将在什么上下文中执行。 jar子总是可以从控制台调用,在这种情况下,println必须留在那里。
事实上,许多jar文件在其他情况下将完全无用。 有许多Java程序通过控制台输入和输出与用户交互。 java-Program 没有必要拥有GUI(或完全在后台运行)。