假设我已经使用
的代码创建了executable jar
System.out.println()
当我们运行可执行jar时,没有控制台。那么,这条线会发生什么? java
如何处理这种情况?
编辑01 :
注意:情况是我不使用控制台运行jar
,也无论如何将任何控制台与之关联。
编辑02 :让事情更清楚:
我知道没有任何东西会被打印出来,因为没有控制台..!我想知道java
在这种情况下如何处理这一行?生成可执行jar的字节码时是否省略了这一行?或者,当没有控制台时,这条线是否被忽略了?或任何......
答案 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?。
答案 2 :(得分:1)
我从控制台(java -jar YourJar.jar)打开它,文本将在控制台窗口中打印出来。
如果您在资源管理器(或类似代码)中打开它,您将无法看到该文字
澄清您的第二个修改: 字节码不会被省略,因为编译器无法知道jar将在什么上下文中执行。 jar总是可以从控制台调用,在这种情况下,println必须留在那里。
事实上,许多jar文件在其他情况下完全没用。有许多Java程序通过控制台输入和输出与用户交互。 对于拥有GUI(或完全在后台运行)的java程序,不是必要的。