可执行jar中的“System.out.println()”会发生什么?

时间:2015-02-12 12:30:22

标签: java executable-jar system.out

假设我已经使用

的代码创建了executable jar
System.out.println()

当我们运行可执行jar时,没有控制台。那么,这条线会发生什么? java如何处理这种情况?

编辑01

注意:情况是我不使用控制台运行jar,也无论如何将任何控制台与之关联。

编辑02 :让事情更清楚:

我知道没有任何东西会被打印出来,因为没有控制台..!我想知道java在这种情况下如何处理这一行?生成可执行jar的字节码时是否省略了这一行?或者,当没有控制台时,这条线是否被忽略了?或任何......

3 个答案:

答案 0 :(得分:7)

在可执行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.

答案 1 :(得分:2)

只要您不从控制台窗口(java -jar executable.jar)运行应用程序,就会省略输出。此外,您可以配置Java安装,以便在启动Java应用程序时立即启动控制台窗口。然后输出将写入JVM的控制台窗口。您可以在官方Java网站上找到文章How do I enable and view the Java Console?

Activate Java console

答案 2 :(得分:1)

我从控制台(java -jar YourJar.jar)打开它,文本将在控制台窗口中打印出来。

如果您在资源管理器(或类似代码)中打开它,您将无法看到该文字

澄清您的第二个修改: 字节码不会被省略,因为编译器无法知道jar将在什么上下文中执行。 jar总是可以从控制台调用,在这种情况下,println必须留在那里。

事实上,许多jar文件在其他情况下完全没用。有许多Java程序通过控制台输入和输出与用户交互。 对于拥有GUI(或完全在后台运行)的java程序,是必要的。